Ordre des appels de constructeur et de destructeur dans l'héritage
Dans la programmation orientée objet avec héritage, comprendre l'ordre des appels de constructeur et de destructeur est crucial . Cela devient particulièrement important lorsqu'il s'agit de plusieurs classes de base et compositions d'objets.
Considérez la hiérarchie de classes suivante :
struct A { A() { cout << "A() C-tor" << endl; } ~A() { cout << "~A() D-tor" << endl; } }; struct B : public A { B() { cout << "B() C-tor" << endl; } ~B() { cout << "~B() D-tor" << endl; } A a; };
Dans la fonction principale :
int main() { B b; }
Ici sont les règles régissant l'ordre des appels de constructeur et de destructeur dans cette hiérarchie d'héritage :
Constructeur Appels :
Appels du destructeur :
L'ordre des appels du destructeur est l'inverse de l'appel du constructeur order :
Liste d'initialisation par défaut :
Même sans liste d'initialisation explicitement définie, le champ membre sera initialisé avant l'appel du constructeur de classe dérivée. Dans ce cas, a serait initialisé avec le constructeur par défaut de A.
Par conséquent, la sortie attendue pour le code dans la fonction principale serait :
A() C-tor A() C-tor B() C-tor ~B() D-tor ~A() D-tor ~A() D-tor
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!