Une classe peut avoir ou non un constructeur par défaut. Il sagit dun constructeur sans aucun paramètre. Dans notre exemple de la section précédente, cest celui que nous avons numéroté 1.
Sil ny a aucun constructeur défini dans la classe, C++ en crée un automatiquement qui est un constructeur par défaut, et qui ne fait rien. De ce fait, une classe a toujours un constructeur, mais na pas forcément un constructeur par défaut ; en effet, si lon définit un constructeur avec paramètre seul, C++ ne fournit pas le constructeur par défaut automatique, et de ce fait il ny en a pas.
Lorsquun constructeur par défaut existe, on peut déclarer une instance de classe sans préciser de paramètres :
exemple ex2; // plus pratique que ex2()
Il nen est pas de même si aucun constructeur par défaut nexiste. Par exemple cette autre classe :
class autre { double d; public: autre(double dd) { d = dd; } };
na pas de constructeur par défaut, aussi lécriture :
autre a;
provoque une erreur de compilation Error : Could not find a match for 'autre::autre()', impossible de trouver une occurrence de 'autre::autre()'. Ce mécanisme est très utile, comme on le verra sur notre exemple de la liste chaînée ci-après.
Lorsquon veut créer un tableau dinstances de la classe sans donner de valeurs initiales, un constructeur par défaut doit exister ; il est alors appelé pour tous les éléments du vecteur :
exemple table[10]; // ok, 10 appels du constructeur 1autre tab[3]; // NON, pas de constructeur par défaut
Précisons un point très important au sujet de la présence dun constructeur par défaut : bien que les constructeurs puissent avoir des arguments par défaut comme toute autre fonction, un constructeur dont tous les arguments possèdent une valeur par défaut nest pas un constructeur par défaut. Ainsi, si lon modifie la classe autre
comme ceci :
class autre { double d; public: autre(double dd = 0) { d = dd; } };
alors linitialisation suivante est acceptée :
autre a; // ok, appel de autre::autre(0)
mais le tableau est toujours refusé :
autre tab[3]; // NON, pas de constructeur par défaut
Précédent | Sommaire | Suivant |