Programmation en C++ opérateur d’affectation

Constructeur de copie, opérateur d’affectation

Parmi les constructeurs, le constructeur qui a un seul paramètre du même type que la classe est appelé constructeur de copie. Il sert à créer un nouvel objet ayant le même état qu’un objet de la même classe.
———————————————————————————
// point.h : définition de la classe #ifndef __POINT__ #define __POINT__ #include<iostream>
class Point { public: Point(const Point & p); // prototype du constructeur de copie Point & operator=(const Point & p); // prototype de l’opérateur = … }; #endif
——————————————————————————————————————-
// point.cpp : #include “Point.h” Point::Point(const Point & p) { // recopie de l’état de p dans l’objet courant _x=p._x; _y=p._y; }
Point & Point::operator=(const Point & p) { // operateur = pour l’affectation de l’état d’un Point _x=p._x; _y=p._y; return (*this); // retourne l’objet courant. }
… ——————————————————————————————————
Dans le langage C++, l’affectation entre variables ou objets de même type est habituellement réalisée par l’opérateur =. Le langage C++ autorise la programmation des opérateurs agissant sur des types utilisateur (voir section suivante). On peut donc programmer le comportement de l’opérateur = portant sur des objets d’une classe. En C++, un opérateur est simplement traité comme une fonction particulière dont le nom de fonction comporte le mot réservé operator. L’opérateur d’affectation est donc simplement une méthode de la classe Point.
————————————————————————————————————
// mise en évidence de l’utilisation du constructeur de copie et de l’opérateur = #include “Point.h” using namespace std;
void main() { Point p1(10,20); Point p3; Point p2(p1); // p2 est créé par copie de p1 // l’état de p2 est (10,20) p3=p1; // équivaut à p3.operator=(p1);
p3.Display(cout) ; // affiche (10,20) }
———————————————————————————

Le pointeur this
Dans la définition de l’opérateur =, on voit l’utilisation d’un membre appelé this. Le membre this d’un objet est du type pointeur sur un objet de la classe. Pour la classe Point, this est donc un membre du type Point *. Ce membre contient l’adresse de l’objet courant. Autrement dit, tout objet peut connaître sa propre adresse. Logiquement, la notation (*this) représente l’objet courant, c’est-à-dire l’objet sur lequel la méthode a été appelée. Point & Point::operator=(const Point & p){
_x=p._x;
_y=p._y; return (*this); // retourne l’objet courant. }
En résumé, l’opérateur = retourne l’objet sur lequel il s’applique. A quoi cela sert-il ? A garder l’homogénéité avec le C++ qui autorise les affectations successives telles que ci-dessous void main(){ Point p1(10,20), p2,p3; p3=p2=p1; /* équivaut à p3.operator=(p2.operator=(p1)); */ }
Ci-dessus, p2=p1 équivaut à p2.operator=(p1) et cette méthode retourne p2. C’est donc p2 (après affectation) qui est affecté à p3.

Cours gratuitTélécharger le cours complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *