Liste d'initialisation des constructeurs C++ : Pourquoi et comment l'utiliser
Lors de l'instanciation d'objets, les constructeurs gèrent souvent l'initialisation des variables membres. Pour de tels membres, une liste d'initialisation pour les constructeurs fournit un moyen abrégé et efficace de les initialiser avant que le corps du constructeur ne soit exécuté. Outre la performance, c'est parfois obligatoire en raison de variables const ou de membres d'une classe de base.
Qu'est-ce qu'une liste d'initialisation de constructeur ?
Une liste d'initialisation de constructeur est une procédure pour initialiser les variables membres directement, donc il n'y a pas de constructeur par défaut qui est copié puis assigné.
Syntaxe
La syntaxe suivante d'initialisation de liste de constructeur est la suivante −
NomClasse(type1 param1, type2 param2) : membre1(param1), membre2(param2) { // Corps du constructeur }
Ici, membre1 et membre2 sont initialisés avec param1 et param2 avant que le corps du constructeur ne s'exécute.
Exemple de liste d'initialisation de constructeur
Voici un exemple simple démontrant comment utiliser une liste d'initialisation.
#include <iostream> #include <string> class Etudiant { public: Etudiant(const std::string& nom, int age) : nom(nom), age(age) {} void afficher() const { std::cout << "Nom: " << nom << ", Age: " << age << "\n"; } private: std::string nom; int age; }; int main() { Etudiant e("Navya", 20); e.afficher(); return 0; }
Sortie
Nom: Navya, Age: 20
Pourquoi utiliser les listes d'initialisation des constructeurs ?
- Pour éviter l'initialisation par défaut suivie de réassignation, pour gagner du temps et des ressources.
- C'est obligatoire pour certains types de variables const, membres de référence et membres de classe de base.
- Cela garde toute la logique d'initialisation en un seul endroit, séparée du corps du constructeur.
Cas spéciaux
Dans ce qui suit, nous discuterons de quelques cas spéciaux pour la liste d'initialisation de constructeur −
Membres Const ou Référence
Les variables const et les membres de référence ne peuvent pas être réassignés, donc ils doivent être initialisés dans une liste d'initialisation,
class Config { public: Config(const std::string& produit, const int & modele) : produit(produit), modele(modele) {} private: const std::string produit; const int & modele; };
Initialisation de la classe de base
Quand une classe dérivée hérite d'une classe de base, vous pouvez utiliser une liste d'initialisation pour appeler le constructeur de la classe de base,
class Base { public: Base(int valeur) : valeurBase(valeur) {} protected: int valeurBase; }; class Derivee : public Base { public: Derivee(int valeur, int extra) : Base(valeur), valeurExtra(extra) {} private: int valeurExtra; };
Langue C
- Maîtriser les classes C# : blueprint pour la programmation orientée objet
- Maîtriser les tableaux C# : Déclaration, initialisation et opérations
- Préprocesseur C++ : Comment les directives façonnent votre code
- Maîtriser la surcharge en C++ : Fonctions et opérateurs expliqués
- Comment passer et retourner des objets dans les fonctions C++
- Comprendre les classes imbriquées C# : Définition, utilisation et héritage
- Comprendre les variables en C# : types, stockage et utilisation
- Variables et types de données en C++ : Guide expert sur int, double, char, string, bool
- strlen() vs sizeof() en C : Comprendre leurs différences et usage correct