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
DDDoriginal
2024-10-25 06:07:02828parcourir

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>

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!

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