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 :

le constructeur en c++


Sujet :

C++

  1. #1
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 18
    Par défaut le constructeur en c++
    bonjour,
    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
    16
    17
    18
    19
    20
    21
    class personne{
    	private :
    		int age;
     
    		char sexe;
     
    		float taille;
     
    	public :
    		personne(int,char,float);
     
    };
     
    personne::personne(int age, char sexe, float taille){
    	this->age = age;
     
    	this->sexe = sexe;
     
    	this->taille = taille;
     
    }
    à quoi ça sert "this->age = age"
    mercii

  2. #2
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2007
    Messages : 373
    Par défaut
    Bonjour,
    La prochaine fois, pense à utiliser les balises [code] autour de ton code pour le rendre plus lisible.
    Pour répondre à ta question, je t'en pose deux autres :
    1. à quoi peut faire référence age dans le constructeur ?
    2. que ce passerait-il si tu avais écrit age = age ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur télécom
    Inscrit en
    Février 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur télécom

    Informations forums :
    Inscription : Février 2011
    Messages : 6
    Par défaut
    La syntaxes que tu utilises pour tes membres privés de classe est dangeureuse car tu n'es pas capable de les différencier de paramètres de méthodes où de variables temporaires. Une bonne habitude est également de commencer par une majuscule le nom de tes classes.

    Une syntaxe commune est de préfixé par m_ tes variables membres (m comme member).

    Ton code deviendrais
    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
    16
    17
     
    class Personne
    {
      private :
        int    m_age;
       char  m_sexe;
       float  m_taille;
      public :
        Personne(int,char,float);
    };
     
    Personne::Personne(int age, char sexe, float taille)
      : m_age(age)
      , m_sexe(sexe)
      , m_taille(taille)
    {
    }
    Le this dans donc code permet de faire explicitement référence aux différentes membres de ta classe. Le préfix par m_ est de mon point de vu plus facile à utiliser.

  4. #4
    Nouveau candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 2
    Par défaut
    Pourquoi s'emmerder quand

    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
    16
    17
     
    class Personne
    {
      private :
        int    age;
       char  sexe;
       float  taille;
      public :
        Personne(int,char,float);
    };
     
    Personne::Personne(int age, char sexe, float taille)
      : age(age)
      , sexe(sexe)
      , taille(taille)
    {
    }
    conviendrait tout aussi bien ?

    L'utilisation du même nom pour les paramètres de création de l'instance et des membres de l'instance est tout à fait possible et ne prête pas à confusion selon moi. Il est au contraire très clair que chaque paramètre du constructeur est mappé 1-1 avec l'attribut de l'instance.

    Pour ce qui est des membres de l'instance, libre à chacun de définir getters et setters si besoin est, mais prefixer chaque membre par m_, on se croirait en Hongrie. Quitte à préfixer, autant préfixer par this->, qui est explicite et natif au langage.

  5. #5
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    En fait, la bonne façon de faire est le code de banche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Personne::Personne(int age, char sexe, float taille)
      : age(age)
      , sexe(sexe)
      , taille(taille)
    {
    }
    le m_ est un peu "old-school". Aujourd'hui on préfère soit ne rien mettre, soit ajouter un underscore à la fin de la variable membre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Personne
    {
       int   age_;
       char  sexe_;
       float taille_;
    Mais en fait, les raisons valables pour identifier une variable membre le sont de moins en moins (valables), puisque les paradigmes modernes encouragent à valider les variables membres le plus tôt possible, idéalement dans la liste d'initialisation du constructeur. Par conséquent, la confusion entre un paramètre de fonction et une variable membre ne se pose jamais puisqu'on utilise toujours les variables membres.

Discussions similaires

  1. [Reflection] Récupérer un constructeur ayant un paramètre int
    Par narmataru dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 09/07/2004, 09h53
  2. [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
  3. [Constructeur]Pb avec la surcharge d un constructeur
    Par cmoulin dans le forum Langage
    Réponses: 3
    Dernier message: 26/04/2004, 09h29
  4. Capture d'exception dans un constructeur
    Par declencher dans le forum Composants VCL
    Réponses: 8
    Dernier message: 03/02/2004, 12h52
  5. pb constructeurs classes dérivant classe abstraite
    Par Cornell dans le forum Langage
    Réponses: 2
    Dernier message: 10/02/2003, 19h02

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