Un constructeur ne peut pas être appelé autrement que lors dune initialisation. Cependant, il peut lêtre de différentes façons. Par exemple, sil existe un constructeur qui nadmet quun seul paramètre, ou plusieurs mais tel que tous les arguments sauf le premier ont une valeur par défaut, on peut lappeler en écrivant le signe égal suivi du paramètre.
Par exemple, en reprenant la classe autre
du paragraphe précédent, on peut écrire :
autre au = 1.2; // appel de autre::autre(1.2)
Cette écriture est équivalente à la forme classique :
autre au(1.2);
mais elle est plus claire. En outre, il est possible dinitialiser des tableaux de cette façon :
autre atab[4] = { 1.2, 2, 0.7, -9.9 };
Il est obligatoire de préciser toutes les valeurs initiales lorsquaucun constructeur par défaut nexiste.
Le compilateur gère lui-même les initialisations de variables automatiques, parmi lesquelles figurent les arguments de fonction. Par conséquent, si lon a écrit une fonction comme celle-ci :
void f(exemple ex);
il est parfaitement légitime de lappeler sous cette forme :
f( exemple(1, 2) );f( exemple() );
Dans ce cas les constructeurs adéquats sont appelés à lentrée de la fonction (et des destructeurs à la sortie). De même, si lon a une fonction :
void g(autre au);
on peut tout à fait écrire :
g(1); // appel de g( autre::autre(1) )
En dautres termes, le constructeur autre::autre(double)
définit un changement de type automatique du type double
vers le type autre
(et donc de tous les types numériques vers ce type).
Il est parfaitement possible de préciser une valeur par défaut à un argument de type classe, pourvu quon utilise un constructeur :
void f(exemple ex = exemple() );void f2(exemple ex = exemple(1, 1) );void g(autre au = 0);
Dans le dernier cas, on a encore utilisé le changement de type automatique.
Précédent | Sommaire | Suivant |