C++ Implémentation Constructeur - Help

MeetTheTaunt -  
[Dal] Messages postés 6205 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 :
-
// 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

[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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
0