Avatar ·

Para que servem as funções virtuais em C++? Explique com um exemplo

Olá! Acabei de começar a estudar C++ e estou tentando entender as funções virtuais. Li muitos artigos, mas ainda não compreendo totalmente para que elas servem. Eu tenho uma classe base `Animal` e classes derivadas `Dog` e `Cat`. Quero que cada animal tenha seu próprio som. Sem funções virtuais, escrevi assim: ```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"; } }; ``` Quando crio objetos diretamente, tudo funciona: ```cpp Dog dog; Cat cat; dog.speak(); // Woof! cat.speak(); // Meow! ``` Mas se eu usar um ponteiro para a classe base, o método da classe base é chamado, e não o da classe derivada: ```cpp Animal* ptr1 = new Dog(); Animal* ptr2 = new Cat(); ptr1->speak(); // Exibe "Some animal sound", mas deveria ser "Woof!" ptr2->speak(); // Exibe "Some animal sound", mas d