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

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

Susan Sarandon
Libérer: 2024-12-05 04:20:10
original
465 Les gens l'ont consulté

How Should Base Class Member Variables Be Initialized in Derived Class Constructors?

Initialisation des variables membres de la classe de base dans les constructeurs de classes dérivées

Dans la programmation orientée objet, l'héritage permet aux classes dérivées d'hériter des propriétés et des comportements de classes de base. Cependant, l'initialisation des variables membres de la classe de base dans les constructeurs de classe dérivée peut parfois poser un défi.

Pourquoi les variables membres de la classe de base ne peuvent-elles pas être initialisées dans les constructeurs de classe dérivée ?

Prenons l'exemple suivant :

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

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

};
Copier après la connexion

Dans ce code, la classe B tente d'initialiser les variables membres de la classe de base a et b dans son propre constructeur. en utilisant la syntaxe : A(), a(0), b(0). Cependant, cette approche est incorrecte. La raison en est que a et b ne sont pas membres de la classe B mais plutôt de la classe A. Seule la classe A peut initialiser directement ces variables.

Bonnes pratiques d'initialisation

Pour résoudre ce problème, il existe quelques approches recommandées :

  • Rendre publics les membres de la classe de base : Une approche consiste à rendre publiques les variables membres de la classe de base, comme indiqué ci-dessous :
class A
{
public:
    int a, b;
};

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

};
Copier après la connexion

Cependant, il n'est pas conseillé de rendre publiques les variables membres car cela viole les principes d'encapsulation et de sécurité.

  • Créer un constructeur de classe de base pour l'initialisation : Une approche plus sécurisée et recommandée consiste à créer un constructeur dans la classe de base qui permet aux classes dérivées de initialiser les variables des membres de la classe de base. Par exemple :
class A 
{
protected:
    A(int a, int b) : a(a), b(b) {} // Accessible to derived classes
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

Cette approche permet aux classes dérivées d'initialiser les variables membres de la classe de base en appelant le constructeur de la classe de base avec les valeurs initiales souhaitées.

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