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) { } };
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 :
class A { public: int a, b; }; class B : public A { B() : a(0), b(0) { } };
Cependant, il n'est pas conseillé de rendre publiques les variables membres car cela viole les principes d'encapsulation et de sécurité.
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. { } };
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!