IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

C++ Implémentation Constructeur


Sujet :

C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 2
    Points : 2
    Points
    2
    Par défaut C++ Implémentation Constructeur
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    // 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;
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // 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.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // 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 ?

  2. #2
    En attente de confirmation mail

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    Bonjour,

    Je te renvois à cette entrée de la FaQ : http://cpp.developpez.com/faq/cpp/?p...-l-affectation .

    Si elle ne répond pas suffisamment à ta question, n'hésite pas à le dire.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 631
    Points : 10 558
    Points
    10 558
    Par défaut
    Cela s'appelle une liste d'initialisation.
    Pour le reste c'est normal: les {} pour définir le bloc - corps du constructeur qui est vide, les virgules pour chaîner les initialisations et ; pour dire fin de ligne (donc pas besoin)

    Mais dans la liste d'initialisation, on ne peut pas mettre d'affection, juste
    • Des appels de constructeurs
    • La notation () pour les types de bases ou autres comme faire des new
    • list initialization en C++11


    Et voici ma réponse sur ce fil de discussion qui a eu l'approbation de Ehonn
    • Dans le corps du constructeur, l'attribut va être défini et initialisé si le compilateur l'a décidé ou si c'est un objet, son constructeur par défaut est appelé. Et ensuite il faudra le modifier pour mettre les bonnes valeurs
    • Avec la liste d'initialisation, l'attribut va être défini et initialisé avec les bonnes valeurs


    Et en C++11, on peut même appeler un autre constructeur de la classe.

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci à vous deux pour ces réponses rapides ! Je comprend mieux maintenant

  5. #5
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Cette liste d'initialisation a une caractéristique primordiale: elle constitue la création des variables.

    Du coup, elle permet de choisir la manière de construire les variables.
    Par ailleurs elle est obligatoire pour toute variable qui ne peut pas être affectée: références, constantes, ressource lourdes (fstream, par exemple), et classes sans opérateur d'affectation (operator=()).

    En fait, c'est la bonne manière de procéder, en toute situation.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB6]Déclaration d'un Constructeur Spécialisé
    Par TagadaTsoin dans le forum VB 6 et antérieur
    Réponses: 21
    Dernier message: 26/05/2004, 14h09
  2. Moteur physique : comment l'implémenter ?
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 17/12/2003, 12h56
  3. pb constructeurs classes dérivant classe abstraite
    Par Cornell dans le forum Langage
    Réponses: 2
    Dernier message: 10/02/2003, 19h02
  4. Réponses: 2
    Dernier message: 06/07/2002, 12h36
  5. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 16h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo