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