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 ?

Les membres de la classe parent protégés peuvent-ils être initialisés via la liste d'initialisation de la classe enfant ?

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

Can Protected Parent Class Members Be Initialized via Child Class's Initialization List?

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>
Copier après la connexion

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>
Copier après la connexion

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!

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