Maison > développement back-end > C++ > Comment puis-je initialiser correctement les variables membres de la classe de base à partir d'un constructeur de classe dérivé ?

Comment puis-je initialiser correctement les variables membres de la classe de base à partir d'un constructeur de classe dérivé ?

Patricia Arquette
Libérer: 2024-12-06 08:09:13
original
407 Les gens l'ont consulté

How Can I Properly Initialize Base Class Member Variables from a Derived Class Constructor?

Utilisation de l'héritage pour l'initialisation des variables membres

Dans la programmation orientée objet, une tâche courante consiste à initialiser les variables membres de la classe de base dans le constructeur de la classe dérivée. Cependant, certains scénarios peuvent empêcher cette initialisation. Explorons un de ces scénarios et une solution recommandée.

Considérez l'extrait de code suivant :

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

class B : public A
{
    B() : A(), a(0), b(0)
    {
    }

};
Copier après la connexion

Ici, le programme tente d'initialiser les variables membres a et b de la classe de base A dans le constructeur de la classe dérivée B. Cependant, cette approche échouera avec une erreur de compilation.

La raison de cette erreur réside dans le fait que a et b ne sont pas membres de B. Ils sont membres de la classe de base A. Par conséquent, seul le constructeur de A a le pouvoir de les initialiser.

Au lieu d'initialiser directement a et b dans le constructeur de la classe dérivée, une solution plus efficace consiste à les déclarer comme membres protégés dans la classe de base et à utiliser un constructeur dans la classe de base pour l'initialisation. Cette approche permet aux classes dérivées d'accéder et d'initialiser ces variables par héritage.

Voici un extrait de code révisé qui démontre cette approche améliorée :

class A 
{
protected:
    A(int a, int b) : a(a), b(b) {} // Accessible to derived classes
    // Change "protected" to "public" to allow others to instantiate A.
private:
    int a, b; // Keep these variables private in A
};

class B : public A 
{
public:
    B() : A(0, 0) // Calls A's constructor, initializing a and b in A to 0.
    {
    } 
};
Copier après la connexion

Dans ce code révisé, le constructeur de la base la classe A prend deux arguments entiers et initialise les variables membres a et b en conséquence. La classe dérivée B hérite du constructeur protégé de A et l'appelle dans son propre constructeur pour initialiser a et b avec les valeurs par défaut de 0.

Cette approche garantit une initialisation correcte des variables membres tout en conservant l'encapsulation et adhère aux principes de la programmation orientée objet.

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