Constructeur & Destructeur de classe
Introduction
- Le constructeur et le destructeur sont deux méthodes i.e. fonctions
membres particulières
- le constructeur est appelé à la création d’un objet,
- le destructeur est appelé à la destruction d’un objet.
- constructeur ≡ initialisation des membres (gestion de l’allocation dynamique de mémoire, par exemple)
- destructeur ≡ ultimes opérations (désallocation de la mémoire précédemment allouée)
Constructeur de classe
- Le constructeur est une méthode à part entière (d’où la possibilité de la
surdéfinir) à ceci près que
- le constructeur doit porter le même nom que la classe,
- le constructeur ne doit avoir aucun type de retour.
Déclaration de constructeurs
class particule { public: // Constructeur par défaut particule(); // Surdéfinition de constructeur particule(const double masse_, const double charge_); private: // Déclaration de membres double m_masse; double m_charge; };
Définition de constructeurs
#include "particule.h" // Initialisation des membres à une valeur par défaut particule::particule() : m_masse(0.0), m_charge(0.0) { } particule::particule(const double masse_, const double charge_) : m_masse(masse_), m_charge(charge_) { } ... particule my_electron; // Constructeur par défaut particule my_positron(0.511, 1.6e-19);
Destructeur de classe
- Le destructeur est également une méthode à ceci près que
- le destructeur doit porter le même nom que la classe préfixé du signe
~
, - le destructeur ne possède pas d'argument; il n’est donc pas possible de surdéfinir cette méthode.
- le destructeur doit porter le même nom que la classe préfixé du signe
- Lors d’allocation dynamique de mémoire, la présence d’un destructeur est obligatoire1
Déclaration de destructeur
class particule { public: // Constructeur par défaut particule(); // Destructeur ~particule(); private: // Déclaration de membres char * m_nom; };
Définition de destructeur
#include "particule.h" // Initialisation particule::particule() : m_nom(new char[256]) { } // Destruction particule::~particule() { delete[] m_nom; }
Notes :
1
c’est également le cas pour l’héritage