Lorsquon déclare une variable, le compilateur lui alloue automatiquement une place en mémoire. Éventuellement, il lui donne une valeur initiale si celle-ci est précisée :
int i = 1;
Dans le cas dune structure sans partie privée, il est possible dinitialiser aussi une instance en donnant la liste des valeurs des champs, dans lordre de leur déclaration :
struct exemple { int i; char c; } ex = { 1, 'A' }, ex2 = { 2 }; exemple ex3 = { 5, 'a' };
Les champs non précisés sont mis à zéro dans ce cas.
Cette possibilité dinitialiser des données au moment de leur déclaration est précieuse, et doit être employée au maximum, comme on la déjà dit précédemment. Cependant, elle possède trois défauts importants. Dabord, dans le cas de classes ou de structures ayant des parties privées, on ne peut évidemment pas lemployer, puisque ces parties sont inaccessibles ; même si elles létaient, rien ne prouve que le programmeur qui utilise une classe sait linitialiser correctement ; par exemple, on ne sait pas initialiser correctement la classe iostream
(voir chapitre 9) qui est fournie dans la librairie dentrées-sorties. Dautre part, les initialisations complexes, nécessitant par exemple des appels de fonctions successifs ne sont pas possibles directement. Enfin, les variables automatiques nétant pas initialisées par le compilateur, le programmeur risque doublier de le faire, et il en résultera des erreurs graves.
De ce fait, le langage fournit à lintention des classes et structures un système un peu plus complexe, mais bien plus sophistiqué, les constructeurs et les destructeurs. Ce système supplée non seulement au premier défaut mais également aux deux autres, comme nous allons le voir.
Précédent | Sommaire | Suivant |