Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Liste d'Initialisation du Constructeur | Constructeurs et Destructeurs
Programmation Orientée Objet en C++
course content

Contenu du cours

Programmation Orientée Objet en C++

Programmation Orientée Objet en C++

1. Fondamentaux de la POO en C++
2. Constructeurs et Destructeurs
3. Aperçu de l'Encapsulation
4. Aperçu de l'Héritage
5. Aperçu du Polymorphisme

book
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

temperature_sensor.h

copy
1234567
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

main.cpp

copy
123456789101112131415
#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; }
Note
Remarque

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

main.cpp

copy
123456789101112131415
#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 ?

question mark

Qu'est-ce qu'une liste d'initialisation de constructeur ?

Select the correct answer

question mark

Quel symbole introduit la liste d'initialisation des membres dans un constructeur ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 2. Chapitre 3

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

course content

Contenu du cours

Programmation Orientée Objet en C++

Programmation Orientée Objet en C++

1. Fondamentaux de la POO en C++
2. Constructeurs et Destructeurs
3. Aperçu de l'Encapsulation
4. Aperçu de l'Héritage
5. Aperçu du Polymorphisme

book
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

temperature_sensor.h

copy
1234567
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

main.cpp

copy
123456789101112131415
#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; }
Note
Remarque

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

main.cpp

copy
123456789101112131415
#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 ?

question mark

Qu'est-ce qu'une liste d'initialisation de constructeur ?

Select the correct answer

question mark

Quel symbole introduit la liste d'initialisation des membres dans un constructeur ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 2. Chapitre 3
some-alt