Contenu du cours
Programmation Orientée Objet en C++
Programmation Orientée Objet en C++
Liste d'Initialisation du Constructeur
Une liste d'initialisation permet aux constructeurs d'initialiser les membres de la classe avant l'exécution du corps du constructeur. Elle est particulièrement utile pour une initialisation complexe ou lors de la manipulation d'objets de classes comportant des membres const
.
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'agrandit, 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) : variable membre de la classe initialisée avec la valeur (argument passé au constructeur) ;
-
{ }
(accolades) : le corps du constructeur, où du code supplémentaire peut être exécuté après l'initialisation des membres.
temperature_sensor.h
class TemperatureSensor { public: TemperatureSensor(int initialTemperature) : currentTemperature(initialTemperature) {} int currentTemperature; };
Limitations et considérations
Il existe une idée reçue 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. Elle est en réalité 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.cpp
#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; }
Essayez de modifier l'ordre d'initialisation de la variable total
dans la liste d'initialisation et dans la déclaration de variable au sein de la class
.
Lorsque vous utilisez des listes d'initialisation dans un constructeur, le nom de l'argument peut être identique au nom de l'attribut de la class
.
main.cpp
#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, la variable total prendra la valeur des arguments multipliés, et non celle des membres. Pour le constater, essayez d'affecter zéro à quantity 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 !