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.9. Constructeur par recopie

Il est tout à fait correct d’écrire ceci :

maClasse c1 ;
maClasse c2 = c1 ;

Le problème est le suivant : la recopie de l’objet c1 dans l’objet c2 est faite sans tenir compte des zones pointées. Ainsi, les pointeurs pointent (forcément !) sur la même zone mémoire. L’intervention d’un des objets sur cette zone produira des effets de bords sur l’autre. Il est ainsi nécessaire de parfois avoir un constructeur spécial, appelé constructeur par recopie qui s’occupera de réaliser une copie correcte de l’objet et d’éviter ainsi ces effets de bord.

Le constructeur par recopie est automatiquement appelé lorsqu’un nouvel objet est déclaré avec comme valeur initiale celle d’un autre objet ( maClasse c2 = c1 ;).

Ce type de constructeur est utile avec les objets utilisant l’allocation dynamique lorsque l’on désire faire passer un objet en paramètre par valeur à des fonctions. Puisque le passage est par recopie, on se retrouverait dans le cas où plusieurs objets pointeraient sur les mêmes zones mémoires.

Ajoutons un constructeur par recopie :

.hpp
maClasse (maClasse &) ;

.cpp
maClasse : : maClasse (maClasse &mc) {
traitement nécessaire pour allouer une nouvelle zone mémoire, y recopier les informations nécessaires
}

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