les arguments qu’on aura mentionnés dans l’en-tête de la définition du constructeur de
pointcol. Par exemple, avec :
pointcol::pointcol (float abs, float ord, int coul) : p (abs, ord)
{ ...
}
on précise que le constructeur du membre p recevra en argument les valeurs abs et ord.
Si l’en-tête de pointcol ne mentionnait rien concernant p, il faudrait alors que le type
point possède un constructeur sans argument pour que cela soit correct.
Initialisation d’objets
En C++, on parle d’initialisation d’un objet dans des situations telles que :
point a = 5 ; // il doit exister un constructeur à un argument de type entier
point b = a ; // il doit exister un constructeur à un argument de type point
Le deuxième cas correspond à l’initialisation d’un objet à l’aide d’un autre objet de
même type, qu’on nomme parfois « initialisation par recopie ». L’opération est réalisée
par appel de ce que l’on nomme un « constructeur par recopie ».
Mais il existe d’autres situations, plus courantes, qui mettent en œuvre un tel
mécanisme, à savoir :
la transmission d’un objet par valeur en argument d’appel d’une fonctionþ;
la transmission d’un objet par valeur en valeur de retour d’une fonction.
Dans toutes ces situations d’initialisation par recopie, le constructeur par recopie
employé est :
soit un constructeur de la forme type (type &) ou type (const type &) s’il en existe un ; ce
dernier doit alors prendre en charge la recopie de tous les membres de l’objet, y
compris ceux qui sont des objets ; il peut cependant s’appuyer sur les possibilités de
transmission d’information entre constructeurs, présentée auparavant ;
La transmission par référence est obligatoire ici. D’autre part, le fait d’utiliser
l’attribut const permet d’appliquer le constructeur à un objet constant ou à une
expression ; rappelons que, dans ce cas, il y création d'un objet temporaire dont on
transmet la référence au constructeur.
soit, dans le cas contraire, ce que l’on nomme un « constructeur de recopie par
166
pointcol. Par exemple, avec :
pointcol::pointcol (float abs, float ord, int coul) : p (abs, ord)
{ ...
}
on précise que le constructeur du membre p recevra en argument les valeurs abs et ord.
Si l’en-tête de pointcol ne mentionnait rien concernant p, il faudrait alors que le type
point possède un constructeur sans argument pour que cela soit correct.
Initialisation d’objets
En C++, on parle d’initialisation d’un objet dans des situations telles que :
point a = 5 ; // il doit exister un constructeur à un argument de type entier
point b = a ; // il doit exister un constructeur à un argument de type point
Le deuxième cas correspond à l’initialisation d’un objet à l’aide d’un autre objet de
même type, qu’on nomme parfois « initialisation par recopie ». L’opération est réalisée
par appel de ce que l’on nomme un « constructeur par recopie ».
Mais il existe d’autres situations, plus courantes, qui mettent en œuvre un tel
mécanisme, à savoir :
la transmission d’un objet par valeur en argument d’appel d’une fonctionþ;
la transmission d’un objet par valeur en valeur de retour d’une fonction.
Dans toutes ces situations d’initialisation par recopie, le constructeur par recopie
employé est :
soit un constructeur de la forme type (type &) ou type (const type &) s’il en existe un ; ce
dernier doit alors prendre en charge la recopie de tous les membres de l’objet, y
compris ceux qui sont des objets ; il peut cependant s’appuyer sur les possibilités de
transmission d’information entre constructeurs, présentée auparavant ;
La transmission par référence est obligatoire ici. D’autre part, le fait d’utiliser
l’attribut const permet d’appliquer le constructeur à un objet constant ou à une
expression ; rappelons que, dans ce cas, il y création d'un objet temporaire dont on
transmet la référence au constructeur.
soit, dans le cas contraire, ce que l’on nomme un « constructeur de recopie par
166
