Encontré este recurso sobre el casting y un ejemplo muy bueno sobre casting con clases
Cast tradicional de C
El cast tradicional consiste en escribir el tipo entre paréntesis delante la variable que quieres convertir.
int a = 5;
float b = (float) a;
Esta forma de cast puede actuar como muchas de las otras formas de cast. El problema es que no siempre está claro cuál. Por eso es posible que tu programa acaba haciendo otra cosa que el esperabas y, por eso, suele haber la recomendación de ya no utilizarlo. Con las demás formas de cast habrá menos malentendidos entre tú y tu compilador.
Cast entre tipos nativos de C++
static_cast
El mayor uso de static_cast es convertir tipos nativos. Por ejemplo
int a = 5;
unsigned short int b = static_cast(a);
float c = static_cast(a);
Aunque para el programador los dos static_cast parecen lo mismo, el compilador debe hacer dos cosas distintas. A convertir de un tipo entero a otro, le basta jugar con los bits. (Básicamente debe llevar el bit de signo a una nueva posición.) Al convertir entre números enteros y números de coma flotante el compilador debe generar código más complejo, ya que la representación de bits es bastante distinta en tipos flotantes.
static_cast sirve también para convertir clases con el operador de cast como veremos más abajo. Si no sabes con qué cast a probar primero, entonces static_cast es una buena opción.
.
Ejemplo de static_cast con clases y polimorfismo:
// Imagina que ya se declaró la clase Vehiculo y la clase Coche
int main () {
Vehiculo *v; // Puntero a objeto de tipo vehÃculo.
Coche c; // Objeto de tipo coche.
c.setRuedas(4); // Se establece el estado de c.
c.setPasajeros(7);
c.setPMA(1885);
v = &c; // v apunta a un objeto de tipo coche.
cout << v->getPMA() << endl; // ERROR en tiempo de compilación.
cout << ((Coche*)v)->getPMA() << endl; // NO recomendable.
cout << static_cast<Coche*>(v)->getPMA() << endl; // Estilo C++.
return 0;
}
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?