Middle+
Qu'est-ce que l'héritage virtuel?
sobes.tech IA
Réponse de l'IA
L'héritage virtuel est une forme d'héritage en C++ qui permet d'éviter le problème du "diamant" (diamond problem), lorsque la même classe de base est héritée indirectement par plusieurs chemins. Avec l'héritage virtuel, la classe de base commune n'existera qu'en une seule instance dans l'objet de la classe finale.
Avantages :
- Éviter la duplication des données et des fonctions de la classe de base commune.
- Fournir une source unique pour accéder aux membres de la classe de base virtuelle.
Inconvénients :
- Complexifie la construction des objets et l'accès aux classes de base virtuelles (via des pointeurs ou des décalages "indirects").
- Légère baisse de performance lors de l'accès aux membres de la classe de base virtuelle en raison de la nécessité de résoudre le décalage en temps d'exécution.
- Restrictions à l'utilisation des classes de base virtuelles dans certains contextes (par exemple, lors de l'initialisation statique).
S'applique lors de la déclaration d'une classe de base avec le mot-clé virtual.
class Base {
public:
int data;
};
class Derived1 : virtual public Base { // Héritage virtuel
};
class Derived2 : virtual public Base { // Héritage virtuel
};
class Final : public Derived1, public Derived2 { // Héritage en diamant
};
// Dans l'objet de la classe Final, il n'y aura qu'une seule instance de Base::data