Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme de classe et d'heritage

question bete sans doute...

Sujet résolu
    3 janvier 2009 à 9:29:08

    Petite question, pourquoi dans ce code, "Constructeur 2 de Herite" n'apparait pas a l'execution ?

    merci !

    #include <iostream>
    using namespace std;
    
    class Base
    {
        public:
        Base(){cout << "Constructeur 1 de Base\n";}
        Base(Base& parent){cout << "Constructeur 2 de Base\n";}
    };
    
    class Herite : public Base
    {
        public:
        Herite();
        Herite(Base& parent);
    };
    
    Herite::Herite() : Base()
    {
        cout << "Constructeur 1 de Herite\n";
    }
    
    Herite::Herite(Base& parent) : Base(parent)
    {
        cout << "Constructeur 2 de Herite\n";
    }
    
    int main()
    {
        cout << "Debut\n";
    
    
        Herite h1;
        Herite h2(h1);
    
        cout << "Fin\n";
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      3 janvier 2009 à 11:00:01

      Tout simplement parceque tu ne t'en sers pas, tu utilises le copy ctor par defaut car il n'est pas implémenter :)
      • Partager sur Facebook
      • Partager sur Twitter
        3 janvier 2009 à 13:19:27

        Autrement dit pour que ton constructeur paramétré devienne un constructeur de copie, il manque un const. Herite::Herite(const Base& parent) : Base(parent)
        • Partager sur Facebook
        • Partager sur Twitter
        Inkamath on GitHub - Interpréteur d'expressions mathématiques. Reprise du développement en cours.
        Anonyme
          3 janvier 2009 à 13:44:14

          Citation : iNaKoll

          Autrement dit pour que ton constructeur paramétré devienne un constructeur de copie, il manque un const. Herite::Herite(const Base& parent) : Base(parent)



          Meme pas, parcequ'il est implémenter prenant un Base&, c'est pas logique d'écrire cela de base ^^
          • Partager sur Facebook
          • Partager sur Twitter
            3 janvier 2009 à 14:08:25

            Ouai... c'est pas faux ! Je dois pas avoir les yeux en face des trous ! :-°
            • Partager sur Facebook
            • Partager sur Twitter
            Inkamath on GitHub - Interpréteur d'expressions mathématiques. Reprise du développement en cours.
              3 janvier 2009 à 14:09:01

              Comme l'on dit iNaKoll et galopin_, c'est le constructeur de copie de Herite qui est appellé, il est ici définie automatiquement.

              PS : il est inutile de marquer Base() dans le constructeur de Herite

              @iNaKoll : avec ou sans const (idem pour volatile) ca reste un constructeur de copie
              • Partager sur Facebook
              • Partager sur Twitter
              FaQ : Fr | En 1 2 | C++11 | Template || Blog : Deloget | C++|Boost--Dev | C++Next | GotW || Installer Boost
                3 janvier 2009 à 14:19:00

                en fait je pense troubler le compilateur avec

                Herite h2(h1)
                


                je ne veux pas faire de copie mais juste acceder a une fonction de h1, donc je vais plutot passer l'adresse et la il y aura plus d'embrouille avec le constructeur de copie... o_O

                Herite h2(&h1)
                
                • Partager sur Facebook
                • Partager sur Twitter
                  3 janvier 2009 à 14:21:51

                  Heu non tu le trouble pas le compilateur réagit normalement.
                  Accéder a une fonction de h1 ? h1.fct() non ? je comprend pas ce que tu cherches a faire si c'est pas appeller un constructeur.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  FaQ : Fr | En 1 2 | C++11 | Template || Blog : Deloget | C++|Boost--Dev | C++Next | GotW || Installer Boost
                    3 janvier 2009 à 14:38:24

                    Citation : Freedom

                    Heu non tu le trouble pas le compilateur réagit normalement.
                    Accéder a une fonction de h1 ? h1.fct() non ? je comprend pas ce que tu cherches a faire si c'est pas appeller un constructeur.



                    C'est que je n'ai pas mis tout le code en fait, mais j'ai résolu mon problème.

                    en fait c'est pour que h2 appelle une fonction de h1, fonction qui ajoute h2 en tant qu'enfant de h1

                    voila

                    merci a tous !

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Probleme de classe et d'heritage

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown