Maison > développement back-end > C++ > le corps du texte

Pourquoi le constructeur par défaut de la classe Grand-mère est-il appelé dans l'héritage virtuel ?

DDD
Libérer: 2024-11-16 22:22:03
original
852 Les gens l'ont consulté

Why is the Grandmother Class's Default Constructor Called in Virtual Inheritance?

Pourquoi le constructeur par défaut est-il appelé dans l'héritage virtuel ?

Lors de la création d'un nouvel objet d'une classe fille à l'aide de l'héritage virtuel, le constructeur par défaut de la classe grand-mère est invoquée de manière inattendue. Ce comportement peut paraître contre-intuitif, sachant que l'utilisateur appelle explicitement le constructeur de la classe mère avec un argument.

Explication :

En héritage virtuel, le constructeur de la base virtuelle La classe est invoquée directement par le constructeur de la classe la plus dérivée. Dans le code donné, la classe fille est la classe la plus dérivée et, par conséquent, elle appelle directement le constructeur grand-mère.

Étant donné que la classe fille ne fournit aucun argument au constructeur grand-mère dans la liste d'initialisation, la valeur par défaut Le constructeur de la classe grand-mère est automatiquement appelé. En effet, par défaut, le compilateur suppose que le constructeur par défaut doit être utilisé lorsqu'aucun constructeur spécifique n'est invoqué.

Solution :

Pour appeler le constructeur grand-mère souhaité avec un argument, la liste d'initialisation du constructeur de la classe fille doit être explicitement mise à jour. Le code correct est :

daughter(int attr) : grandmother(attr), mother(attr) { ... }
Copier après la connexion

Cela garantit que le constructeur grand-mère est appelé avec l'argument spécifié. Alternativement, la classe grand-mère peut fournir un constructeur par défaut qui accepte un argument.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal