14.10.5. Una crisis

Por supuesto, cualquier conversión pierde la información del tipo sobre el objeto. Si dice

Wind w;
Instrument* ip = &w;

el compilador puede utilizar ip solo como un puntero a Instrumento y nada mas. Esto es, éste no puede conocer que ip realmente esta apuntando a un objeto Wind. Entonces cuando llame a la función miembro play() diciendo

ip->play(middleC);

el compilador solo puede conocer que la llamada a play() es de un puntero a Instrument y llamara a la versión de la clase base Instrument::play() en vez de lo que debería hacer, que es llamar a Wind::play(). Así, no conseguirá una conducta adecuada.

esto es un problema importante; es resulto en el Capitulo 15, introducción al tercer pilar de la programación orientada a objetos: poliformismo (implementado en C++ con funciones virtuales).