Exood4 Studio - Video Game Development, Toulouse (France)
Exood4 Studios Exood4 Tutorials

   
L a n g a g e   C++

C o n s t r u c t e u r s   e t   d e s t r u c t e u r s






Constructeurs


 Pour permettre l'affectation entre deux objets de même type, le compilateur utilise le constructeur de recopie, il est alors possible d'écrire :

point p1(3.5,5.2);
point p2 = p1;

 Le constructeur de recopie par défaut recopie champ à champ les attributs d'un objet. Il est néanmoins possible de surcharger le constructeur de recopie dont la spécification est :

classe (classe &);


Exemple :

class point
{
private :
 float abscisse, ordonnee;

public :
 point (point &);
 ...
};

point::point(point &p)
{
 abscisse = p.abscisse;
 ordonnee = p.ordonnee;
}


Utilisation du constructeur de recopie

 Le constructeur de recopie s'utilise lors de sa déclaration ou lors d'un passage par valeur d'un paramètre à une fonction.


Exemple : dans un programme client de la classe point

void fct1 (point p)
{
 ...
}
void fct2 ()
{
 point x;
 fct1 (x); // appel du constructeur de recopie
}


Remarque :
Ne pas confondre le constructeur de recopie avec l'opérateur d'affectation


Le destructeur


 Le destructeur d'une classe est une fonction membre de la classe qui porte le même nom que la classe précédée du symbole ~ .

 Le destructeur n'a jamais d'argument et ne retourne rien. Cette fonction est appelée lors de la destruction d'un objet (libération de l'espace alloué pour l'objet).

class point
{
private :
 ...

public :
 ~point ();
 ...
};

point::~point ()
{
 cout << "destruction\n";
}

void main ()
{
 point p1, p2;
} // destruction de p2 puis p1

 Les destructions se font dans l'ordre inverse des constructions.


Différentes constructions à partir d'une classe


class point
{
private :
 float abscisse, ordonnee;

public :
 point (float=0.0, float=0.0);
 ~point ();

 void afficher ();
};

point::point (float x, float y)
{
 cout << "construction\n";
 abscisse = x;
 ordonnee = y;
}


1) Tableau d'instances d'une classe

#include "point.h"

void main ()
{
 cout << "Debut\n"; // Debut

 point courbe[4]; // construction (4 fois)

 courbe[0].afficher (); // (0.0,0.0)
 courbe[3].afficher (); // (0.0,0.0)

 cout << "Fin\n"; // Fin
} // destruction (courbe[3])
 // destruction (courbe[2])
 // destruction (courbe[1])
 // destruction (courbe[0])


2) Pointeur d'objet

#include "point.h"

void main ()
{
 point *p1, *p2;

 cout << "Debut\n"; // Debut

 p1 = new point; // construction
 p2 = new point(5.2, 6.3); // construction

 p1->afficher (); // (0.0,0.0)

 delete p1; // destruction de p1

 p2->afficher (); // (5.2,6.3)

 cout << "Fin\n"; // Fin
}

 La mémoire allouée pour p2 n'a pas été libérée !

Tout objet alloué par la fonction new doit être libéré par la fonction delete avant la fin du programme ...


3) Pointeur sur un tableau d'instances d'une classe

void main ()
{
 point *courbe;

 cout << "Debut\n"; // Debut

 courbe = new point[4]; // construction * 4

 courbe[0].afficher (); // (0.0,0.0)

 delete courbe; // destruction * 4

 cout << "Fin\n"; // Fin
}


4) Tableau de pointeurs d'instances d'une classe

void main ()
{
 point *courbe[4];

 courbe[0] = new point(5.2,6.3);
 courbe[3] = new point;

 courbe[0]->afficher ();

 delete courbe[0];
 delete courbe[3];
}



  Retour en haut de page Page suivante