Héritage virtuel et initialisation du constructeur
L'héritage virtuel est une technique utilisée en C pour résoudre l'ambiguïté de l'héritage multiple. Lorsqu'une classe hérite de plusieurs classes de base ayant le même membre, l'héritage virtuel garantit qu'une seule copie de ce membre est créée, réduisant ainsi la surcharge de mémoire.
Cependant, l'héritage virtuel introduit une situation unique lorsqu'il s'agit de à l'initialisation du constructeur. Dans l'exemple fourni, nous avons trois classes : Base, A et B, où A et B héritent virtuellement de Base. La classe C hérite alors à la fois de A et de B.
Le problème
Dans le constructeur de la classe C, une erreur se produit lors de l'initialisation de Base. Le compilateur ne peut pas faire correspondre l'appel de fonction à Base() car C n'hérite pas directement de Base. Alors pourquoi cette erreur se produit-elle ?
Comprendre l'initialisation des classes de base virtuelles
Les classes de base virtuelles ont un processus d'initialisation différent de celui des classes de base non virtuelles. Lorsqu’une classe de base virtuelle est héritée, il incombe à la classe la plus dérivée de l’initialiser. Dans ce cas, la classe C est la classe la plus dérivée et elle doit initialiser la classe de base virtuelle Base.
Comme Base n'a pas d'instance directe de C, elle ne peut pas être initialisée à l'aide des constructeurs A ou B. Au lieu de cela, Base doit être initialisé à l’aide de son constructeur par défaut. Cependant, le code fourni n'inclut pas le constructeur par défaut pour Base.
La solution
Pour résoudre ce problème, vous devez définir un constructeur par défaut dans la classe Base. , comme ceci :
class Base { public: Base() = default; // Default constructor added Base(Base* pParent); /* implements basic stuff */ };
Ce constructeur par défaut sera utilisé pour initialiser la variable membre virtuel Base dans la classe C.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!