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) { } };
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. { } };
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!