Maison  >  Article  >  développement back-end  >  Comment initialiser les membres protégés d'une classe parent dans le constructeur d'une classe enfant ?

Comment initialiser les membres protégés d'une classe parent dans le constructeur d'une classe enfant ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-25 04:45:02276parcourir

How to Initialize Protected Members of a Parent Class in a Child Class's Constructor?

Initialisation des membres protégés avec une liste d'initialisation

Dans la programmation orientée objet, les classes parents peuvent avoir des membres protégés accessibles par les classes enfants. Lors de l'initialisation d'objets enfants, il peut être souhaitable d'initialiser également les membres protégés déclarés dans la classe parent. Cependant, ce n'est pas aussi simple qu'il y paraît.

Considérons l'exemple suivant :

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

class Child : public Parent {
private:
    Child() : something("Hello, World!") {}
};</code>

Dans cet exemple, nous essayons d'initialiser le membre protégé quelque chose de la classe parent en utilisant l'initialisation liste du constructeur de la classe enfant. Cependant, le compilateur signalera une erreur : la classe 'Child' n'a aucun champ nommé 'quelque chose'. Cette erreur se produit car le membre protégé quelque chose n'est pas déclaré dans la classe enfant et n'est donc pas visible dans la liste d'initialisation.

Solution

Pour initialiser les membres protégés d'un classe parent dans le constructeur d'une classe enfant, nous devons ajouter un constructeur (de préférence protégé) à la classe parent qui prend les paramètres nécessaires pour initialiser ces membres. La classe enfant peut ensuite utiliser ce constructeur pour transmettre les valeurs appropriées.

Voici une implémentation révisée :

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

Dans cet exemple, nous avons ajouté un constructeur protégé à la classe Parent qui prend un paramètre de chaîne et l'utilise pour initialiser quelque chose au membre protégé. La classe Child utilise ensuite ce constructeur pour initialiser le membre protégé de son parent lors de sa propre construction.

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!

Déclaration:
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