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