Héritage virtuel est un mécanisme C++ permettant de créer une classe de base qui peut être héritée en toute sécurité plusieurs fois, sans provoquer de problèmes de découpage d'objet ou d'erreurs d'exécution.
Prenons l'exemple suivant :
```c++
//Classe de base
classe Animal {
publique:
nom de chaîne ;
} ;
// Classe dérivée 1
classe Chien : Animal public {
publique:
race à cordes;
} ;
// Classe dérivée 2
classe Chat :public Animal {
publique:
couleur de la chaîne ;
} ;
// Classe dérivée 3 (hérite du chien et du chat)
classe Animal :chien public, chat public {
publique:
//...
} ;
```
Sans héritage virtuel, la classe `Pet` hériterait de deux copies de la classe de base `Animal`, ce qui pourrait conduire à des erreurs d'exécution ou à un découpage d'objet (où seule une partie de l'objet `Pet` est construite). Pour éviter cela, nous pouvons utiliser l'héritage virtuel en spécifiant le mot-clé `virtual` dans la déclaration de la classe de base :
```c++
// Classe de base avec héritage virtuel
classe Animal {
publique:
nom de chaîne ;
} ;
```
En utilisant l'héritage virtuel, la classe `Pet` n'héritera qu'une seule copie de la classe de base `Animal`, garantissant un comportement correct et évitant les erreurs d'exécution.
Avantages :
1. Résoudre l'ambiguïté : Aide à résoudre l’ambiguïté lorsque plusieurs classes de base ont la même fonction membre ou le même membre de données.
2. Surcharge de mémoire réduite : Évite le découpage d’objets, réduisant ainsi la surcharge de mémoire et améliorant les performances.
3. Flexibilité : Permet des hiérarchies d'héritage complexes dans lesquelles les classes dérivées peuvent hériter de plusieurs classes de base.
Quand utiliser l'héritage virtuel :
- Lorsque vous disposez de plusieurs héritages et que vous souhaitez éviter les membres de base ambigus ou le découpage d'objets.
- Lorsque vous souhaitez partager des fonctionnalités communes entre plusieurs classes dérivées sans dupliquer le code.
|