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 :

Comment initialiser une classe membre d'une autre


Sujet :

C++

  1. #1
    Invité
    Invité(e)
    Par défaut Comment initialiser une classe membre d'une autre
    Bonjour,

    J'ai une classe Voiture qui contient des "Roue"s comme variables membres.
    Je cherche à initialiser les instances des classes "Roue" dans le constructeur de Voiture.
    J'ai trouvé une solution (voir ci-dessous le constructeur de Voiture), mais je trouve cette syntaxe un peu compliquée, il y a une autre syntaxe pour appeler les constructeurs de "Roue" ?
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
     
    #include <iostream>
     
    // Classe Roue
    struct Roue {
     
    private:
      float nDiametre;
     
    public:
      Roue(float nDiametre) {
        this->nDiametre = nDiametre;
      }// Roue
     
      float getDiametre() {
        return nDiametre;
      }
     
    };// Roue
     
     
    // Classe Voiture
    struct Voiture {
      Roue rAVG;
      Roue rAVD;
      Roue rARG;
      Roue rARD;
      static const float ncDiamParDefaut;
     
      Voiture() :rAVG(ncDiamParDefaut),
                 rAVD(ncDiamParDefaut),
                 rARG(15),
                 rARD(15){
      }// Voiture
     
     
      void afficher() {
        std::cout << " AVG = " << rAVG.getDiametre()
                  << " AVD = " << rAVD.getDiametre()
                  << " ARG = " << rARG.getDiametre()
                  << " ARD = " << rARD.getDiametre() << std::endl;
      }// afficher
     
    };// Voiture
    const float Voiture::ncDiamParDefaut = 12;// init de la constante
     
    using namespace std;
     
    int main(int argc, char* argv[])
    {
      Voiture voiture1;
      voiture1.afficher();
      return 0;
    }// main
    A l'execution, ce programme donne bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     AVG = 12 AVD = 12 ARG = 15 ARD = 15

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Non, c'est la seule syntaxe valide pour appeler un constructeur de donnée membre (ou de classe mère). Mais personnellement je ne vois pas ce qui est compliqué dans cette écriture.

  3. #3
    Invité
    Invité(e)
    Par défaut Syntaxe
    Citation Envoyé par Laurent Gomila
    Mais personnellement je ne vois pas ce qui est compliqué dans cette écriture.
    Ben, ça peut faire quand même une ligne de code un peu longue pour le constructeur de "Voiture"...
    J'aurais préféré avoir une syntaxe où j'aurais pu appeler le constructeur de "Roue" dans le corps du constructeur de "Voiture", ligne par ligne... Un peu comme le "super" de Java...

    Sinon il y avait aussi la solution de dériver une classe Roue2 de Roue en lui ajoutant un constructeur par défaut et d'utiliser Roue2 dans Voiture à la place de Roue...

    Merci en tous cas...

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    C'est déjà écrit ligne par ligne, non ? Ce sont juste des lignes d'initialisation, au lieu d'être des lignes de code (d'ailleur, je les indente généralement comme si elles étaient des lignes de code dans le constructeur).

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 05/04/2011, 17h19
  2. Réponses: 3
    Dernier message: 29/03/2010, 17h01
  3. initialisation des classes membres d'une classe
    Par Krishna dans le forum C++
    Réponses: 2
    Dernier message: 09/05/2008, 20h27
  4. fonction membre d'une classe amie d'une autre classe
    Par olive_le_malin dans le forum C++
    Réponses: 3
    Dernier message: 16/11/2006, 09h39
  5. Initialiser une référence membre d'une classe
    Par NicolasJolet dans le forum C++
    Réponses: 2
    Dernier message: 18/03/2006, 12h14

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