Nous avons dit au début de ce long paragraphe sur les constructeurs et destructeurs quils étaient fournis en premier lieu pour résoudre le problème posé par linitialisation des membres privés dune classe, sans perdre les avantages de lencapsulation des données. Cependant, nous avons vu quils résolvent aussi les deux autres problèmes que posait la méthode élémentaire dinitialisation. Dune part, ils permettent en effet une initialisation arbitrairement complexe, avec de nombreux appels de fonctions, des boucles, etc. Dautre part, le constructeur par défaut est appelé automatiquement lors de la création de variables automatiques (sil existe, sinon une erreur de compilation est produite), et le destructeur est appelé lorsque la variable automatique devient inutile.
De plus, la possibilité de supprimer le constructeur par défaut en en définissant dautres avec paramètres empêche un programmeur étourdi dinitialiser une variable automatique lorsque cest absolument nécessaire ; par exemple, comme on le verra au chapitre 9, la classe iostream
ne possède pas de constructeur par défaut, mais un constructeur avec tampon ; de la sorte, on ne peut pas créer une instance de cette classe sans lui fournir le tampon nécessaire. Il sagit là dun mécanisme caché extrêmement puissant qui assure que les instances dune classe contiennent toujours des valeurs significatives et cohérentes (à condition que les méthodes de la classe aient été définies correctement évidemment).
Les constructeurs sont donc beaucoup plus intéressants que les initialisateurs usuels. On retiendra quil sagit dun mécanisme puissant, qui ne se maîtrise pas immédiatement : une certaine accoutumance est nécessaire.
Exercice 6.3 | Écrire une classe void f(chaine& c1, chaine& c2 = chaine() ) { chaine c = c2; if (c2.longueur() == 0) c.ajoute("Début = "); c.ajoute(c1).ajoute(c2); c.ecrire(); }main() { f("suite\n"); f(" milieu ", "bord"); return 0; } Il ne faut pas gaspiller de mémoire, mais deux chaînes même identiques seront conservées dans deux zones différentes. Le programme doit provoquer lécriture de la chaîne On pourra utiliser les fonctions de |
Voir solution |
Précédent | Sommaire | Suivant |