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

Les classes enfants peuvent-elles initialiser des membres parents protégés via des listes d'initialisation ?

DDD
Libérer: 2024-10-25 07:57:02
original
783 Les gens l'ont consulté

Can Child Classes Initialize Protected Parent Members Through Initialization Lists?

Initialisation des membres parents protégés dans la liste d'initialisation de la classe enfant

Lors de l'héritage d'une classe avec des membres de données protégés, il peut être souhaitable de les initialiser à l'aide de la liste d'initialisation de l'enfant constructeur de la classe. Cependant, cette approche conduit souvent à des erreurs de compilation.

Dans cet exemple :

<code class="cpp">class Parent {
protected:
    std::string something;
};

class Child : public Parent {
private:
    Child() : something("Hello, World!") {}
};</code>
Copier après la connexion

La compilation de ce code entraînera une erreur, car la classe enfant Child n'a pas de membre nommé quelque chose .

Pour résoudre ce problème, la classe parent Parent doit définir un constructeur qui initialise quelque chose au membre protégé. Ce constructeur peut être déclaré protégé, permettant aux classes dérivées d'y accéder.

Le code modifié ci-dessous sera compilé avec succès :

<code class="cpp">class Parent {
protected:
    std::string something;
    Parent(const std::string& something) : something(something) {}
};

class Child : public Parent {
private:
    Child() : Parent("Hello, World!") {}
};</code>
Copier après la connexion

Dans ce code modifié, le constructeur protégé de la classe Parent transmet l'argument d'initialisation du membre quelque chose, permettant à la classe enfant d'initialiser le membre protégé du parent lors de sa propre initialisation.

En suivant cette syntaxe, il devient possible d'initialiser les membres parents protégés à l'aide de la liste d'initialisation de la classe enfant, en fournissant un plus grand contrôle et une plus grande flexibilité dans l'initialisation des objets dans les hiérarchies d'héritage.

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
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