C++ Implémentation Constructeur - Help
MeetTheTaunt
-
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je lis le livre "Initiez-vous à la programmation en C++", je suis rendu au chapitre 11 " Constructeurs, opérateurs et pointeurs".
Jusqu'à maintenant, j'ai vu que l'on initialisais un constructeur comme ceci :
-
-
-
Maintenant en continuant à lire, j'ai aperçu que le livre a employé une méthode que je n'ai jamais vu pour implémenter un constructeur. Le résultat est le même mais j'aurais besoin d'explication.
-
-
Je trouve cela bizarre, car dans le livre il n'en parle même pas et ne me donne aucune explication. Y a t'il une différence entre les deux ?
Pourquoi ce {} a la fin ?
Pourquoi ce : après les parenthèses ?
Une virgule au lieu d'un point virgule ? :(
Je lis le livre "Initiez-vous à la programmation en C++", je suis rendu au chapitre 11 " Constructeurs, opérateurs et pointeurs".
Jusqu'à maintenant, j'ai vu que l'on initialisais un constructeur comme ceci :
-
// Déclaration Classe
class Rectanglez
{
public:
Rectanglez(int largeur, int hauteur);
~Rectanglez() {}
void DessinerForme(int uneLargeur, int uneHauteur,
bool ValsActuelles = false) const;
private:
int saLargeur;
int saHauteur;
};
-
// Implémentation Constructeur (Méthode que je connais)
Rectanglez::Rectanglez(int largeur, int hauteur)
{
saLargeur = largeur;
saHauteur = hauteur;
}
-
Maintenant en continuant à lire, j'ai aperçu que le livre a employé une méthode que je n'ai jamais vu pour implémenter un constructeur. Le résultat est le même mais j'aurais besoin d'explication.
-
// Implémentation Constructeur (Méthode que je ne connais pas)
Rectanglez::Rectanglez(int largeur, int hauteur):
saLargeur(largeur),
saHauteur(hauteur)
{}
-
Je trouve cela bizarre, car dans le livre il n'en parle même pas et ne me donne aucune explication. Y a t'il une différence entre les deux ?
Pourquoi ce {} a la fin ?
Pourquoi ce : après les parenthèses ?
Une virgule au lieu d'un point virgule ? :(
1 réponse
-
Salut,
Je ne connais pas ce livre, mais ce que tu mentionnes s'appelle "Member initializer list" :
https://en.cppreference.com/w/cpp/language/constructor
C'est la façon orthodoxe et semble-t-il plus efficace en ressources (que l'initialisation dans le corps du constructeur) de donner dans le constructeur d'une classe ou d'une structure C++, des valeurs initiales aux membres. La liste d'initialisation est intégrée à la suite de la définition du constructeur, séparée par ":" et avant le corps du constructeur lui même.
Dans le standard C++11, c'est § 12.6.2 (je n'ai pas les autres standards sous la main).
Sur la question de l'usage de ce procédé par rapport à l'initialisation dans le corps du constructeur, vois par exemple :
http://www.parashift.com/c++-faq/init-lists.html
https://forums.codeguru.com/showthread.php?464084-C-General-What-is-the-initialization-list-and-why-should-I-use-it
Pourquoi ce {} a la fin ?
Parce que dans ton code, tu ne fais rien de particulier en plus, dans le corps du constructeur.
Dal