Maison > développement back-end > C++ > Comment les variables membres de la classe de base doivent-elles être initialisées dans un constructeur de classe dérivée ?

Comment les variables membres de la classe de base doivent-elles être initialisées dans un constructeur de classe dérivée ?

Mary-Kate Olsen
Libérer: 2024-12-06 08:32:10
original
871 Les gens l'ont consulté

How Should Base Class Member Variables Be Initialized in a Derived Class Constructor?

Initialisation des variables membres de la classe de base dans le constructeur de classe dérivée

Dans la programmation orientée objet, il est courant d'avoir des relations d'héritage entre les classes. Lorsqu'une classe dérivée est construite, il est essentiel d'initialiser correctement les variables membres héritées de sa classe de base. Cependant, tenter d'initialiser les membres de la classe de base directement dans le constructeur de la classe dérivée peut entraîner des erreurs.

Considérez l'exemple de code suivant :

class A
{
public:
    int a, b;
};

class B : public A
{
public:
    B() : A(), a(0), b(0)
    {
    }
};
Copier après la connexion

Lorsque vous essayez de compiler ce code, il en résultera dans une erreur, car le constructeur de la classe dérivée ne peut pas initialiser directement les membres de la classe de base. En effet, les membres de la classe de base ne sont pas accessibles à la classe dérivée.

Pour résoudre ce problème, vous devez créer un constructeur dans la classe de base qui permet aux classes dérivées d'initialiser les membres hérités. Le code modifié suivant illustre cette approche :

class A
{
protected:
    A(int a, int b) : a(a), b(b) {}
private:
    int a, b;
};

class B : public A
{
public:
    B() : A(0, 0)
    {
    }
};
Copier après la connexion

Maintenant, la classe dérivée B peut initialiser les membres hérités a et b en appelant le constructeur de la classe de base A. En déclarant le constructeur dans A comme protégé, il est accessible aux classes dérivées mais pas aux autres classes en dehors de la hiérarchie d'héritage. Alternativement, vous pouvez déclarer le constructeur A comme public pour permettre l'instanciation externe.

En utilisant cette approche, vous pouvez garantir une initialisation correcte des membres hérités tout en conservant l'encapsulation et en empêchant l'accès direct aux variables privées depuis l'extérieur de la classe.

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.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal