Avatar ·

Pourquoi les fonctions virtuelles sont-elles nécessaires en C++ ? Expliquez avec un exemple

Bonjour ! Je viens de commencer à apprendre le C++ et j'essaie de comprendre les fonctions virtuelles. J'ai lu beaucoup d'articles, mais je ne comprends toujours pas complètement à quoi elles servent. J'ai une classe de base `Animal` et des classes dérivées `Dog` et `Cat`. Je veux que chaque animal ait son propre son. Sans fonctions virtuelles, j'ai écrit ceci : ```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"; } }; ``` Quand je crée des objets directement, tout fonctionne : ```cpp Dog dog; Cat cat; dog.speak(); // Woof! cat.speak(); // Meow! ``` Mais si j'utilise un pointeur vers la classe de base, c'est la méthode de la classe de base qui est appelée, et non celle de la classe dérivée : ```cpp Animal* ptr1 = new Dog(); Animal* ptr2 = new Cat(); ptr1->speak(); // Affiche "Some animal sound", mais devrait afficher "Woof!" ptr2->speak(); // Affiche "Some animal sound", mais devrait