Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Constructeur et Destructeur dans l'Héritage | Aperçu de l'Héritage
C++ Oop
course content

Contenu du cours

C++ Oop

C++ Oop

1. Fondamentaux de la POO en C++
2. Constructeurs et Destructeurs
3. Aperçu de l'Encapsulation
4. Aperçu de l'Héritage
5. Aperçu du Polymorphisme

book
Constructeur et Destructeur dans l'Héritage

Constructeur de la Classe de Base en Premier

Dans le contexte de l'héritage, les constructeurs jouent un rôle essentiel dans l'initialisation correcte des classes dérivées. Comprendre la séquence dans laquelle les constructeurs sont invoqués est clé pour saisir la dynamique de l'héritage. Regardez la sortie de l'extrait de code ci-dessous pour voir l'ordre des appels des constructeurs.

cpp

main

copy
12345678910111213141516
#include <iostream> class Base { public: Base() { std::cout << "Base constructor called" << std::endl; } }; class Derived : public Base { public: Derived() { std::cout << "Derived constructor called" << std::endl; } }; int main() { Derived derivedObj; }

Rappelez-vous

Une fois que le constructeur de la Classe de Base a terminé son initialisation, le constructeur de la Classe Dérivée est exécuté.

La superclasse est appelée en premier car elle doit initialiser les membres hérités de la sous-classe. Cela garantit que la sous-classe commence avec un état valide et peut se fier à l'état initialisé de sa classe de base.

cpp

main

copy
123456789101112131415161718
class Base { public: Base(int value) : data(value) {} private: int data; }; class Derived : public Base { public: Derived(int value) : Base(value) {} }; int main() { }

Dans l'exemple, nous appelons le constructeur avec des paramètres dans la liste d'initialisation. Vous devez explicitement appeler le constructeur de la superclasse dans la liste d'initialisation du constructeur de la sous-classe. Si vous ne spécifiez pas un constructeur de classe de base dans la liste d'initialisation, le constructeur par défaut de la superclasse est appelé automatiquement.

Destructeur de la Classe Dérivée en Premier

Lorsqu'un objet est détruit, les destructeurs sont invoqués dans l'ordre inverse de leurs constructeurs. Cela signifie que les destructeurs sont appelés pour la classe la plus dérivée en premier, puis pour chaque classe de base dans l'ordre inverse de leur déclaration.

cpp

main

copy
12345678910111213141516
#include <iostream> class Base { public: ~Base() { std::cout << "Base destructor called" << std::endl; } }; class Derived : public Base { public: ~Derived() { std::cout << "Derived destructor called" << std::endl; } }; int main() { Derived derivedObj; }

Rappel

Ce n'est qu'après que le destructeur de la Classe de Base a terminé son nettoyage, que le destructeur de la Classe Dérivée est invoqué.

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 4
We're sorry to hear that something went wrong. What happened?
some-alt