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 :

Communication entre classes


Sujet :

C++

  1. #1
    Membre confirmé Avatar de matteli
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 85
    Par défaut Communication entre classes
    Voilà, je galère, je galère sur des choses qui sont simple.

    Imaginons 3 classes A, B, C.

    C est composé des 2 classes A et B

    Comment est ce qu'une fonction membre de A peux utiliser des variables publiques de B?

    Exemple de code qui ne marche pas :

    main.ccp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include <iostream>
    #include "C.h"
    using namespace std;
    C c;
    int main()
    {
        cout << c.b.fonction() << endl;
        return 0;
    }
    C.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #ifndef C_H_INCLUDED
    #define C_H_INCLUDED
    # include "A.h"
    # include "B.h"
    class C
    {
        private:
     
        public:
            A a;
            B b;
    };
    #endif // C_H_INCLUDED
    A.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #ifndef A_H_INCLUDED
    #define A_H_INCLUDED
    class A
    {
        private:
            int x;
        public:
            int y;
            A();
    };
    #endif // A_H_INCLUDED
    A.ccp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    # include "A.h"
    A::A()
    {
        x=2;
        y=3;
    }
    B.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #ifndef B_H_INCLUDED
    #define B_H_INCLUDED
    class B
    {
        private:
            int i;
        public:
            int j;
            B();
            int fonction();
    };
    #endif // B_H_INCLUDED
    B.ccp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    # include "B.h"
    B::B()
    {
        i=5;
        j=7;
    }
     
    int B::fonction()
    {
        return(c.a.y);  //bien sur ça ne passe pas à la compil car c n'est pas déclaré
    }
    Si quelqu'un pouvait m'expliquer comment faire ça proprement.

    Merci

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Si un objet a besoin d'un autre, le plus simple (et souvent la meilleure solution) est de le construire avec, par exemple :
    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
    class A {
    public:
      explicit A( int y ) : y_( y ) {}
      int y_;
    };
     
    class B
    {
    public:
      explicit B( A& a ) : a_( a ) {}
      int fonction() { return( a_.y_ ); }
    private:
      A& a_;
    };
     
    class C
    {
    public:
      C() : b_( a_ ) {}
     
    private:
      A a_;
      B b_;
    };
    MAT.

  3. #3
    Membre confirmé Avatar de matteli
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 85
    Par défaut
    Est ce que tu ou quelqu'un d'autre peut m'expliquer comment se passe l'initialisation, parce que j'avoue que je ne comprends pas trop les constructeurs.

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Regarde déjà la partie de la FAQ consacrée aux constructeurs et si après tu as des questions on y répondra volontiers.

    MAT.

  5. #5
    Membre confirmé Avatar de matteli
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 85
    Par défaut
    bon je pense avoir à peu près compris mais il y a une erreur à la compilation car
    "y" n'est pas initialisé dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    explicit B( A& a ) : a_( a ) {}
    J'ai bien essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    explicit B( A& a ) : a_( a (2)) {}
    mais ça marche pas.

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Ah pardon effectivement, il faut faire quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class C
    {
    public:
      C() : a_( 42 ), b_( a_ ) {}
     
    private:
      A a_;
      B b_;
    };
    MAT.

  7. #7
    Membre confirmé Avatar de matteli
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 85
    Par défaut
    Ok, je te remercie.

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

Discussions similaires

  1. Exercice sur les frontière de pays. - communication entre classes
    Par transab dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 27/05/2010, 16h54
  2. Communication entre classes
    Par sunshine33 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 03/02/2010, 21h04
  3. communication entre classes
    Par milomar dans le forum C++
    Réponses: 6
    Dernier message: 02/03/2008, 11h59
  4. Problème de communication entre classe
    Par FabaCoeur dans le forum Général Java
    Réponses: 4
    Dernier message: 22/01/2008, 13h50
  5. [c#] probléme de communication entre classe
    Par OpenGG dans le forum C#
    Réponses: 1
    Dernier message: 24/09/2006, 21h54

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