Compilation & Directives de préprocesseur Pointeurs, Références & Allocation Dynamique de Mémoire Spécificités du C++ (indépendantes de la POO) Structures & Classes Encapsulation des données Constructeur & Destructeur de classe Copie d'objets Amitié & Surcharge d'opérateur Héritage (Partie 1) Héritage (Partie 2) Patrons de fonctions et de classes Introduction à la librairie standard
Retour menu principal

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.
  • 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