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