Contenu du cours
C++ Oop
C++ Oop
Liste d'Initialisation du Constructeur
Une liste d'initialisation est un mécanisme utilisé dans les constructeurs pour fournir un moyen d'initialiser les membres de données d'une classe avant que le corps du constructeur ne soit exécuté. Cela peut être particulièrement utile lorsqu'on traite des instances qui ont des exigences d'initialisation complexes ou lorsqu'on travaille avec objets de classes qui contiennent des membres const ou de référence.
Syntaxe de la liste d'initialisation
La syntaxe des listes d'initialisation peut sembler excessivement complexe et déroutante. On pourrait envisager d'utiliser uniquement un constructeur comme alternative plus simple. Cependant, à mesure que le programme s'étend, les listes d'initialisation s'avèrent pratiques et faciles à utiliser.

-
: (symbole deux-points) : introduit la liste d'initialisation des membres dans un constructeur.
-
member(value) : une variable membre de classe étant initialisée avec la valeur (argument passé au constructeur).
-
{ } (Accolades) : le corps du constructeur, où un code supplémentaire peut être exécuté après l'initialisation des membres.
Limitations et Considérations
Il existe une idée fausse courante concernant l'ordre d'initialisation dans la liste d'initialisation. Contrairement à la croyance populaire, l'initialisation des variables dans la liste d'initialisation ne suit pas l'ordre dans lequel elles sont écrites. Au lieu de cela, elle est déterminée par l'ordre de déclaration des membres dans la classe, et non par la séquence dans la liste d'initialisation.
main
#include <iostream> class Exchanger { public: Exchanger(float _quantity, float _rate) : quantity(_quantity), rate(_rate), total(quantity * rate) {} float quantity, rate, total; }; int main() { Exchanger exchanger(100, 0.3); std::cout << exchanger.total; }
Remarque
Essayez de modifier la séquence d'initialisation de la variable total dans la liste d'initialisation et dans la déclaration de variable au sein de la classe.
Lorsque vous utilisez des listes d'initialisation dans un constructeur, le nom de l'argument peut être le même que le nom de l'attribut de la classe.
main
#include <iostream> class Exchanger { public: Exchanger(float quantity, float rate) : quantity(quantity), rate(rate), total(quantity * rate) {} float quantity, rate, total; }; int main() { Exchanger exchanger(100, 0.3); std::cout << exchanger.total; }
Mais si vous utilisez le même nom pour les variables membres et les arguments, le total prendra la valeur des arguments multipliés, pas des membres. Pour voir cela, essayez de définir la quantité à zéro au lieu de l'argument.
1. Qu'est-ce qu'une liste d'initialisation de constructeur ?
2. Quel symbole introduit la liste d'initialisation des membres dans un constructeur ?
Merci pour vos commentaires !