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 :

utiliser des classes dans une classe


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 48
    Points : 33
    Points
    33
    Par défaut utiliser des classes dans une classe
    Je souhaite utiliser plusieurs classes B dans une classe A :
    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
     
    class ClasseB
    {
    ClasseB(int bb)
     { /*constructeur B*/  }
    int x,y;
    };
     
    class ClasseA
    {
    ClasseB B1(1);
    ClasseB B2(2);
    ClasseB B3(3);
     ClasseA(int aa)
     { /*constructeur A*/  }
    };
    j'ai toujours "did you forget the & ?" (sous GCC).
    Où j'ai faux ?

  2. #2
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 264
    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 264
    Points : 6 683
    Points
    6 683
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    le problème est ici:
    Ce code est incorrect. Si tu souhaites déclarer un objet de type ClasseB dans ta classe ClassA, la syntaxe suivante est la bonne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class ClasseA
    {
    ClasseB B1;
    //...
    };
    Sachant que le code ci-dessus implique que
    -> soit ClasseB possède un constructeur par défaut,
    -> ou que l'objet B1 soit construit dans la liste d'initialisation de tous les constructeurs de ClasseA

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 48
    Points : 33
    Points
    33
    Par défaut
    Mais alors comment passer les arguments au contructeur ?

  4. #4
    Membre actif

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 171
    Points : 218
    Points
    218
    Par défaut
    Bonjour,

    Justement, avec la liste d'initialisation.

    si ta classe A utilise une classe B tu peux faire

    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
     
     
    class ClassA
    {
        ClassA(int aa)
            : b1(1), b2(2), b(3)
        {
            /* Constructeur de ClassA */
        }
     
        ClassB b1;
        ClassB b2;
        ClassB b3;
     
    }

  5. #5
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 264
    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 264
    Points : 6 683
    Points
    6 683
    Billets dans le blog
    2
    Par défaut
    Deux autres solutions sont possibles:

    1/ Faire en sorte que ClasseB possède un constructeur par défaut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class ClassB
    {
    public:
       ClassB()
       {
          //...
       }
       //...
    };
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class ClassB
    {
       ClassB( int param = 0)
       {
          //...
       }
       //...
    };
    Ce qui aura pour conséquence d'appeler automatiquement ce constructeur par défaut si la construction des instances de ClassB n'est pas faite explicitement dans la liste d'initialisation.

    2/ Utilser des pointeurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ClassA
    {
       ClassB * B;
    };
    On pourra alors construire B quand bon nous semble à l'aide d'un new.
    Cette méthode étant à éviter tant que faire se peut, mais malheureusement, il y a des cas où elle peut s'avérer la meilleure.

Discussions similaires

  1. utiliser des tableaux dans une class
    Par artemis93 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 24/04/2011, 11h45
  2. Poo : utiliser une classe dans une classe ?
    Par devoluti0n dans le forum Langage
    Réponses: 2
    Dernier message: 28/10/2010, 17h03
  3. utiliser les attribut d'une classe dans une autre classe
    Par kaissaoui dans le forum Langage
    Réponses: 11
    Dernier message: 18/07/2007, 15h13
  4. Réponses: 8
    Dernier message: 16/02/2007, 15h55
  5. [POO] Utilisation d'une classe dans une classe !
    Par Okinou dans le forum Langage
    Réponses: 3
    Dernier message: 16/02/2006, 14h34

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