Skip to content

Latest commit

 

History

History
96 lines (72 loc) · 2.61 KB

File metadata and controls

96 lines (72 loc) · 2.61 KB

Constructeur et destructeur

  • Le constructeur et le destructeur sont deux méthodes particulières qui sont appelées respectivement à la création et à la destruction d'un objet

  • Le compilateur définit un constructeur et un destructeur par défaut

  • A partir du moment ou un constructeur ou un destructeur a été défini par le programmeur, le compilateur ne définit plus le constructeur ou destructeur par défaut.

  • Le constructeur et le destructeur doivent

    • Porter le même nom que la classe
    • Ne pas avoir de type de retour
  • Le destructeur est en plus précédé du signe ~

Personne(){
    nom="";
    age=0;
}

Personne(string n, int a){
    nom=n;
    age=a;
}

Personne(string n){
    nom=n;
}

~Personne(){}

Constructeur et liste d'initialisation

  • Pour initialiser les données membres, on peut utiliser une liste d’initialisation.
Personne(string n, int a):nom(n), age(a){}
  • Si la déclaration est séparée de la définition, on ne met la liste d’initialisation que dans le .cpp
fichier .h          Personne(string n, int a);
fichier .cpp        Personne::Personne(string n, int a):nom(n),age(a){}

Appel

  • Un constructeur s’appelle comme les autres fonctions
Personne p("toto",20); // crée une personne avec nom égal à toto et age égal à 20
  • Pour le constructeur par défaut, on peut ne pas mettre les parenthèses
Personne p();
Personne p; // ces 2 lignes sont équivalentes

Constructeur de copie

  • Le constructeur de copie est un constructeur qui prend en paramètre une référence sur un objet de la classe.
Personne(Personne & p);
  • Sert à créer un nouvel objet de la classe en copiant un autre objet
Personne p1("toto", 20);
Personne p2(p1); //p2 sera une nouvelle personne avec les mêmes valeurs d’attributs que p1.
class Personne{
    private :
        string nom;
        int nbLivres; 
        string *livres;
    public:
        Personne(string n, int nb): nom(n),nbLivres(nb) {
            livres = new string[nbLivres];}
        Personne(Personne &source){
            nom = source.nom;
            nbLivres = source.nbLivres;
            livres = new string[nbLivres];
            for(int i = 0; i<nbLivres;i++){
                livres[i] = source.livres[i]}
        }
};
  • Le constructeur de copie est appelé implicitement lorsque l’on passe un objet en paramètre en entrée

  • Un constructeur de copie par défaut existe, mais il n’est pas suffisant lorsqu’il y a de l’allocation dynamique de mémoire (utilisation de new) car sinon il y a partage de la zone mémoire allouée