Maison >développement back-end >C++ >Les membres de la classe parent protégés peuvent-ils être initialisés via la liste d'initialisation de la classe enfant ?
Initialisation des membres de données protégés de la classe parent dans la liste d'initialisation de la classe enfant
Dans la programmation orientée objet, les classes dérivées peuvent hériter des fonctionnalités de leurs classes de base . Une question qui se pose souvent est de savoir s'il est possible d'initialiser les données membres protégées de la classe parent à l'aide de la liste d'initialisation du constructeur de la classe enfant.
Considérez l'exemple de code suivant :
<code class="cpp">class Parent { protected: std::string something; }; class Child : public Parent { private: Child() : something("Hello, World!") { } };</code>
Quand en essayant de compiler ce code, le compilateur renvoie une erreur indiquant que la classe « Enfant » ne contient pas de données membres nommées « quelque chose ». En effet, la liste d'initialisation n'est autorisée qu'à initialiser les données membres au sein de la classe enfant elle-même.
Pour obtenir la fonctionnalité souhaitée, il est nécessaire d'ajouter un constructeur à la classe parent qui accepte la valeur initiale souhaitée et la transmet au membre de données de la classe de base. Par exemple :
<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 ce cas, le constructeur de la classe « Parent » initialise le membre de données protégé « quelque chose » lorsqu'il est invoqué à partir de la liste d'initialisation de la classe enfant. Ainsi, la classe enfant hérite du membre de données initialisé « quelque chose » de sa classe parent.
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!