Constructeur

·        méthode appelée implicitement à chaque déclaration d'un objet afin de l'initialiser.

·        Il faut écrire le constructeur

·        Attn : le constructeur est une méthode publique

 

Rq : nom-classe = nom-du-constructeur

 

constructeur inline : Nom-Classe.h

nom-classe(type param1=valpardéf, type param2=valpardéf) : attr1(param1), attr2(param2)    {if (attrX op …) exit(1);}

 

constructeur dans le fichier Nom-Classe.C

nom-classe::nom-classe(type param1=valpardéf, type param2=valpardéf) : attr1(param1), attr2(param2)

{if (attrX op …) exit(1);}

 

On peut alors faire les déclarations d'objet suivantes :

nom-classe   nom-objet( );

nom-classe   nom-objet(val);

nom-classe   nom-objet(val1,val2);

 

Constructeur par recopie

 

CLASSE(const CLASSE &objet);

 

·  passage d'un objet-paramètre par valeur : une copie est créée

Þ paramètre du CPR en référence (sinon appel au CPR)

·  construire un objet à partir d'un objet de la même classe

 

Déclarer un objet à construire avec le CPR

CLASSE objetCréé(objetExistant);

Û

CLASSE objetCréé = objetExistant;

 

Il existe un constructeur par recopie par défaut

Þ redéfinir le CPR que si recopie + traitement supplémentaire

Û redéfinir aussi l'opérateur d'affectation

 

objet1 = objet2;

* est opérateur d'affectation que si les 2 objets existent déjà

* sinon : appel du CPR (objet2 existe déjà)

 

Il existe un opérateur d'affectation par défaut (=)

 

Attn qd objet1=objet1;

 

objetExistant = CLASSE (…);

® construction objet temporaire (…)

® opérateur d'affectation

 

CLASSE NouvelObjet = objetExistant;

® appel CPR

 

objetExistant1 = objetExistant2;

® opérateur d'affectation

 

Exception :

 

CLASSE objet =CLASSE (…);     Û   CLASSE objet(…);

 

 

 

 

 

Construire un objet à partir d'un autre objet

même classe

classe ¹

® CPR et

opérateur d'affectation

® ZIC

® constructeur avec val par déf

® constructeur sans paramètres

 

CPR et opérateur d'affectation

class CLASSE

{    AUTRECLASSE objet_membre;     

   public :

      CLASSE(…….);    //constructeur

     

}

 

Objet membre = objet d'une autre classe, attribut privé de la classe

 

Constructeur sans paramètres

AUTRECLASSE::AUTRECLASSE(  );

 

Constructeur avec val par défaut

AUTRECLASSE::AUTRECLASSE (val par déf…);

Attn : permet des conversions implicites !!!

 

ZIC du constructeur

CLASSE::CLASSE(……) : obj_membre(…), obj_membre(…)  { }