Supponiamo di avere una classe Dog
che eredita da una classe Animal
. Qual è la differenza tra queste due righe di codice?Puntatore della classe base contro il puntatore della classe ereditata?
Animal *a = new Dog();
Dog *d = new Dog();
In uno, il puntatore è per la classe base e nell'altro il puntatore è per la classe derivata. Ma quando questa distinzione diventerà importante? Per il polimorfismo, uno dei due funzionerebbe esattamente allo stesso modo, giusto?
In questo caso specifico funzionerebbe allo stesso modo. Ma supponiamo che tu abbia un altro gatto di classe che eredita da Animal. Non puoi passare un gatto alla funzione che si aspetta un cane (che facilmente), ma puoi passare un gatto a un animale. Il polimorfismo ha senso "solo" con più di una classe derivata – DaClown