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 :

probleme d'heritage entre 2 classes


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 24
    Par défaut probleme d'heritage entre 2 classes
    Bonjour,

    je sais que c'est une question qui revient régulièrement mais malgrès mes recherches je continue a ramer....

    Je vous met un exemple de ce que je voudrais 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
    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
    #include <cstdlib>
    #include <iostream>
     
    using namespace std;
     
    class Classe1
    {
          public:
                 int IntClasse1;
    };
     
    class Classe2
    {
          public:
                 Classe1 TabClasse1[3];
                 void InitTab()
                 {
                      TabClasse1[0].IntClasse1 = 5;
                      TabClasse1[1].IntClasse1 = 2;
                      TabClasse1[2].IntClasse1 = 8;
                 }
    };
     
    class Classe3 : public Classe2
    {
          public:
                 void aff()
                 {
                      cout<<TabClasse1[0].IntClasse1<<endl;
                 }
    };
     
    int main(int argc, char *argv[])
    {
        Classe2 cls2;
        Classe3 cls3;
     
        cls2.InitTab();
        cls3.aff();
     
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    Le problême est que quand j'execute la fonction cls3.aff(); qui devrait m'afficher 5 elle m'affiche un nombre au pif (comme lorsque l'on affiche un int déclaré mais auquel on a affecté aucune valeur...)

    Si vous pouviez m'aider en me disant ce qu'y va pas sa serait sympa

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 36
    Par défaut
    Bonjour Shrine,

    il me semble que cls2 et cls3 sont deux objets (instances) différentes. Chacun a donc son propre exemplaire des données membres et en particulier le tableau TabClasse1.

    Après l'instantiation de cls2, tu invoques bien la méthode InitTab sur cls2, ce qui, a priori, va bien remplir l'exemplaire de TabClasse1 appartenant a cls2.

    Or, la ligne suivante, tu invoques la méthode aff sur cls3, alors que tu n'as pas (encore ?) invoqué la méthode InitTab sur cls3. Il est donc normal que le contenu de TabClasse1 appartenant à cls3 ne corresponde pas à tes attentes.

    Tu as peut-être voulu écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Classe2 cls2;
    cls2.InitTab();
    cls2.aff();
     
    Classe3 cls3;
    cls3.initTab();
    cls3.aff();
    MarkH

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 24
    Par défaut
    MERCI je comprends déjà beaucoup mieux.... je pensais que les attributs étaient partagés en mémoire entre classe mère et classe fille... pour toujours garder les 2 tableaux identiques il faut donc toujours modifier les 2 en même temps... pas pratique mais au moins maintenant je sais ce que je dois faire

    Sinon que pensez vous du fait de passer en argument une classe à la méthode d'une autre genre :

    void aff(Classe2 cls)
    {
    cout<<cls.TabClasse1[0].IntClasse1<<endl;
    }

    avec dans le main :

    Classe2 cls2;
    Classe3 cls3;

    cls3.aff(cls2);

    Bien ou pas bien (je suppose que c'est beaucoup moins bien que d'utiliser l'héritage mais on sais jamais ) ?

  4. #4
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 100
    Par défaut
    ce que tu peux faire, c'est d'instancier la classe cl3 avec un constructeur qui demande en argument l'adresse de la classe cl2, tu ranges dans cl3 le pointeur correspondant. Et tu l'utilises quand tu veux afficher cl2.
    bon il faut faire gaffe que ta classe cl2 soit tjrs existante lors de l'affichage sinon > plantage.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 24
    Par défaut
    Salut,

    je vais essayer ta solution mais j'ai un prôblème... récupérer la classe et la stocker dans un pointeur ok mais pour accéder à un attribut ou une méthode j'ai essayé :

    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
    #include <cstdlib>
    #include <iostream>
     
    using namespace std;
     
    class A
    {
          public:
                 void aa()
                 {
                      cout<<"youpiiii !!"<<endl;
                 }
    };
     
    class B
    {
          public:
                 void bb(A * cls)
                 {
                      &cls.aa();
                 }
    };
     
    int main(int argc, char *argv[])
    {
        A a;
        B b;
     
        b.bb(&a);
     
    /*
    j'ai aussi essayé avec
    A * a;
    B b;
     
    b.bb(a);
    */
     
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    mais bien sur..... sa marche pas

  6. #6
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 100
    Par défaut
    essaye plutot ca :
    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
     
    class A
    {
    int para;
    };
     
    class B : public A
    {
     A *pA;
     
    B(A *cls): pA(cls)
    {}
     
    out()
    {
    cout << pA->para << endl;
    }
    };
    Bon c'est un truc sursimplifié, mais le principe est la

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 24
    Par défaut
    ahhh ben oui j'avais oublié ->

    on va mettre sa sur le compte de la fatigue

    Merci beaucoup à tous... je met le sujet en résolu

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 20/05/2009, 15h32
  2. Heritage entre 2 classes
    Par deadcankill dans le forum Langage
    Réponses: 1
    Dernier message: 08/02/2009, 20h43
  3. Notion d'heritage entre 2 classes
    Par themacprod dans le forum C++
    Réponses: 1
    Dernier message: 22/05/2008, 12h19
  4. probleme de connexion entre delphi 7 et une BD access
    Par bob.marley dans le forum Bases de données
    Réponses: 5
    Dernier message: 21/04/2004, 11h17
  5. Probleme de connection entre postgresql et PgAccess
    Par Missvan dans le forum PostgreSQL
    Réponses: 11
    Dernier message: 24/03/2004, 11h14

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