Avatar ·

¿Por qué se necesitan las funciones virtuales en C++? Explica con un ejemplo

¡Hola! Acabo de empezar a estudiar C++ y estoy tratando de entender las funciones virtuales. Leí muchos artículos, pero aún no comprendo del todo para qué sirven. Tengo una clase base `Animal` y clases derivadas `Dog` y `Cat`. Quiero que cada animal tenga su propio sonido. Sin funciones virtuales, escribí esto: ```cpp class Animal { public: void speak() { cout << "Some animal sound\n"; } }; class Dog : public Animal { public: void speak() { cout << "Woof!\n"; } }; class Cat : public Animal { public: void speak() { cout << "Meow!\n"; } }; ``` Cuando creo objetos directamente, todo funciona: ```cpp Dog dog; Cat cat; dog.speak(); // Woof! cat.speak(); // Meow! ``` Pero si uso un puntero a la clase base, se llama al método de la clase base, no al de la derivada: ```cpp Animal* ptr1 = new Dog(); Animal* ptr2 = new Cat(); ptr1->speak(); // Muestra "Some animal sound", pero debería ser "Woof!" ptr2->speak(); // Muestra "Some animal sound", y de