Maison > développement back-end > C++ > Comment résoudre l'ambiguïté des constructeurs dans l'héritage virtuel C ?

Comment résoudre l'ambiguïté des constructeurs dans l'héritage virtuel C ?

Patricia Arquette
Libérer: 2024-12-19 00:06:12
original
940 Les gens l'ont consulté

How Can Constructor Ambiguity in C   Virtual Inheritance Be Resolved?

Héritage virtuel C : résolution de l'ambiguïté du constructeur pour plusieurs bases virtuelles

Le code donné, présentant les classes de base virtuelles A et B héritées par la classe dérivée C, rencontre une erreur de compilation lors de la tentative de construction d'une instance de C. Bien que C n'hérite de Base qu'indirectement via A et B, GCC soulève un problème pour trouver le constructeur correct pour que la classe de base s'initialise.

Comprendre l'initialisation de la classe de base virtuelle

Les classes de base virtuelles diffèrent par leur processus d'initialisation. Au lieu d'être gérée par des classes de base intermédiaires, l'initialisation de la base virtuelle est déléguée à la classe la plus dérivée. Lors de la construction d'une classe dérivée qui hérite de plusieurs bases virtuelles, comme C dans ce cas, le compilateur est confronté au défi de sélectionner l'initialiseur approprié pour la base virtuelle.

Résoudre l'ambiguïté

Pour résoudre cette ambiguïté, la classe la plus dérivée doit initialiser explicitement la classe de base virtuelle dans sa liste d'initialisation des membres. Dans ce cas, C doit inclure les éléments suivants dans son constructeur :

C(C* pParent) : Base(pParent), A(pParent), B(pParent) {}
Copier après la connexion

En initialisant explicitement Base dans le constructeur, vous demandez au compilateur d'utiliser le constructeur par défaut pour Base, garantissant ainsi une initialisation correcte.

Disponibilité du constructeur par défaut

Il est important de se rappeler qu'une classe de base virtuelle doit avoir un accès et constructeur implicite par défaut. Si aucun constructeur par défaut n'est disponible ou accessible, la compilation échouera.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal