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).