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

Quand la liste d'initialisation d'un constructeur de classe enfant peut-elle être utilisée pour initialiser des données membres protégées ?

Linda Hamilton
Libérer: 2024-10-24 13:59:02
original
669 Les gens l'ont consulté

When Can the Initialization List of a Child Class Constructor Be Used to Initialize Protected Data Members?

Liste d'initialisation et initialisation des membres protégés

Dans la programmation orientée objet utilisant C , il est courant que les classes héritent des classes parents et étendre leurs fonctionnalités. Cependant, une question se pose : la liste d'initialisation du constructeur d'une classe enfant peut-elle être utilisée pour initialiser des données membres déclarées comme protégées dans la classe parent ?

Pour tenter d'y parvenir, on peut avoir du code similaire au suivant :

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

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

Cependant, cette tentative entraînera une erreur du compilateur, indiquant que la classe Child n'a pas de champ nommé quelque chose. En effet, le membre de données quelque chose est déclaré comme protégé dans la classe parent.

Pour initialiser les membres protégés à l'aide de la liste d'initialisation d'une classe enfant, une approche alternative est requise. Un constructeur avec l'initialisation requise peut être ajouté à la classe parent, et ce constructeur peut ensuite être invoqué à partir du constructeur de la classe enfant. Ceci peut être réalisé grâce au transfert de constructeur :

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

    std::string something;
};

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

Dans ce code modifié, un constructeur protégé est ajouté à la classe Parent et il prend un paramètre de chaîne. Le constructeur de la classe Enfant appelle ensuite le constructeur protégé de la classe Parent en utilisant le transfert de constructeur pour transmettre l'argument nécessaire et initialiser le membre de données quelque chose.

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
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!