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 mme 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 dfaut recopie champ champ les attributs d'un objet. Il est nanmoins possible de surcharger le constructeur de recopie dont la spcification 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 dclaration ou lors d'un passage par valeur d'un paramtre 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'oprateur d'affectation


Le destructeur


 Le destructeur d'une classe est une fonction membre de la classe qui porte le mme nom que la classe prcde du symbole ~ .

 Le destructeur n'a jamais d'argument et ne retourne rien. Cette fonction est appele lors de la destruction d'un objet (libration 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.


Diffrentes 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 mmoire alloue pour p2 n'a pas t libre !

Tout objet allou par la fonction new doit tre libr 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