Appel des constructeurs

Un constructeur ne peut pas être appelé autrement que lors d’une initialisation. Cependant, il peut l’être de différentes façons. Par exemple, s’il existe un constructeur qui n’admet qu’un seul paramètre, ou plusieurs mais tel que tous les arguments sauf le premier ont une valeur par défaut, on peut l’appeler 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 d’initialiser 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 lorsqu’aucun constructeur par défaut n’existe.

Le compilateur gère lui-même les initialisations de variables automatiques, parmi lesquelles figurent les arguments de fonction. Par conséquent, si l’on a écrit une fonction comme celle-ci :

void f(exemple ex);

il est parfaitement légitime de l’appeler sous cette forme :

f( exemple(1, 2) );f( exemple() );

Dans ce cas les constructeurs adéquats sont appelés à l’entrée de la fonction (et des destructeurs à la sortie). De même, si l’on a une fonction :

void g(autre au);

on peut tout à fait écrire :

g(1);   // appel de g( autre::autre(1) )

En d’autres 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 qu’on 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 Précédent Sommaire Sommaire Suivant Suivant