Supongamos que tengo una clase Dog
que hereda de una clase Animal
. ¿Cuál es la diferencia entre estas dos líneas de código?Puntero de clase base frente a puntero de clase heredado?
Animal *a = new Dog();
Dog *d = new Dog();
En uno, el puntero es para la clase base, y en el otro, el puntero es para la clase derivada. ¿Pero cuándo se haría importante esta distinción? Para el polimorfismo, cualquiera de los dos funcionaría exactamente igual, ¿verdad?
Para este caso específico, funcionaría igual. Pero supongamos que tienes otra clase Cat que hereda de Animal. No puedes pasar un gato a la función que espera un perro (así de fácil), pero puedes pasar un gato a un animal. El polimorfismo tiene sentido "solo" con más de una clase derivada – DaClown