Programmation Orientée objet en C++
Chapitre 1. Vocabulaire
Chapitre 2. Principes de la programmation objet
Chapitre 3. Du C au C++
Chapitre 4. Les classes
4.1. Entête dans le .hpp
4.2. Définition dans le .cpp
4.3. Instanciation et Utilisation
4.4. Utilisation avec des pointeurs
4.5. Fonctions
4.6. Constructeurs/Destructeurs
4.7. Objets utilisés en paramètres, en retour
4.8. Adresse d'un objet : this
4.9. Constructeur par recopie
4.10. Objets contenant d'autres objets
4.11. Surcharge/Surdéfinition d'opérateurs
4.12. Héritage
Page d'accueilTable des matièresNiveau supérieurPage précédenteBas de la pagePage suivante

4.6. Constructeurs/Destructeurs

Contrairement aux données locales d’une fonction, les données membres d'une classe ne peuvent pas être initialisées. Il faut donc prévoir une méthode se chargeant de ce travail et penser à l’appeler lors de chaque instanciation d’objet. Dans le cas d’un oubli d’appel de cette méthode d’initialisation, le fonctionnement de l’objet risque de produire des résultats surprenants !

De manière symétrique, nous pouvons prévoir une méthode qui serait la dernière appelée pour cet objet dont le rôle serait la destruction propre de ce même objet. Elle permettrait par exemple la libération en mémoire des variables allouées dynamiquement, suppression de graphiques, fermetures de fichiers, …

Afin d’éviter ces oublis, il existe une manière de prévoir ces initialisations ainsi que ces terminaisons, ce sont les constructeurs et les destructeurs. Ainsi, lors de la création de l’objet la constructeur sera appelé (il porte le même nom que la classe, ne retourne rien, même pas void). Lors de la destruction de cette classe, son destructeur (~nomClasse) sera invoqué.
Ainsi, en considérant une classe appelée maClasse, si l’on désire avoir les variables a et b initialisées, il faut :

Ajouter le constructeur dans la section public

.hpp :
public :
maClasse( int, int) ;

.cpp :
maClasse : : maClasse( int v1, int v2 = 10) {
a = v1 ; b = v2 ;
}

Le constructeur étant une méthode (publique) comme une autre, il lui est possible d’avoir des paramètres, éventuellement même des paramètres par défaut.

Exemple :
maClasse c1(12) ; // a = 12, b=10
maClasse c2(5,15) ; // a = 5, b=15

Concernant le destructeur, le fonctionnement est similaire

.hpp
~maClasse( ) ;

.cpp
maClasse : :~maClasse( ) {

}

Page d'accueilTable des matièresNiveau supérieurPage précédenteHaut de la pagePage suivante