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 :

2 Syntaxes construteur


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 48
    Points : 62
    Points
    62
    Par défaut 2 Syntaxes construteur
    Bonsoir j'ai vue qu'il y avait deux syntaxes possible pour écrire un constructeur dont une qui est plus aimé par les devs.

    première:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     Polynome::Polynome()
     {
        std::vector<int> m_polynome(10,0);
        unsigned short m_degre(0);
     }

    deuxiéme:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     Polynome::Polynome(): std::vector<int> m_polynome(10,0),unsigned short m_degre(0)
     {
     
     }

    Pour la première le code compile, mais pas pour la deuxième. J'ai vue qu'on ne pouvais pas toujours coder le deuxième constructeur dans certains cas. Cependant je n'ai pas vue ces cas... donc, je ne peux pas écrire ce deuxième code parce que j'ai un tableau dynamique ?

  2. #2
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 739
    Points : 3 627
    Points
    3 627
    Par défaut
    Ce n'est pas que l'une est plus aimé que l'autre, c'est que la première modifie l'état d'une variable après appel du constructeur est que la seconde appel le constructeur.

    Cela dit, les 2 codes présentés sont faux

    Pour une classe de cette forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Polynome {
        std::vector<int> m_polynome;
        unsigned short m_degre;
    public:
        Polynome();
    };
    On peux faire (pas bien)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Polynome::Polynome()
    {
      //ici le constructeur de m_polynome a déjà été appelé 
      m_polynome.resize(10,0);
      m_degre = 0;
    }
    ou (bien)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Polynome::Polynome()
    : m_polynome(10,0) //ce qui suit ':' se nomme la liste d'initialisation
    , m_degre(0)
    {}
    Les deux donnent un résultat identiques ici, mais
    - la première fait appel implicitement au constructeur par défaut de m_polynome et m_degre pour ensuite modifier l'état des variables respectivement avec resize et une affectation.
    - la seconde appel un construction particulier de std::vector et initialise m_degre à 0.

    La seconde forme est donc largement préféré car c'est une véritable construction. De plus, c'est la seul qui passe tout le temps (hormis une exception avant c++11 : les tableaux).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class reference_wrapper {
      T & ref;
    public:
      reference_wrapper(T &)
    };
     
    //ne compile pas car une référence doit être initialisé
    reference_wrapper::reference_wrapper(T & r)
    { ref = r; } //ici c'est trop tard
     
    //ok
    reference_wrapper::reference_wrapper(T & r)
    : ref(r)
    {}

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 48
    Points : 62
    Points
    62
    Par défaut
    Okay ! Merci pour cet éclairage.

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

Discussions similaires

  1. [syntaxe] Gerer les variables dans une requete
    Par rastapopulos dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 15/04/2003, 12h53
  2. Syntaxe requete
    Par Chipolata dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/03/2003, 14h22
  3. [Syntaxe] Action simultanée sur plusieurs élements
    Par FranT dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/03/2003, 20h20
  4. Syntaxe TASM <-> MASM
    Par LFC dans le forum Assembleur
    Réponses: 3
    Dernier message: 28/02/2003, 15h56
  5. [VB6] [Syntaxe] Fonction renvoyant un tableau d'objets
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/10/2002, 15h33

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