Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème Héritage avec fonctions virtuelles et substitution

Sujet résolu
    8 mai 2008 à 21:17:12

    Bonjour,

    Je me posais une question concernant l'héritage et la substitution : Si on substitue un objet Fille à un pointeur ou une référence vers un objet Mère, et qu'on appelle une fonction virtuelle de la mère, est-ce que la fonction appelée correspondra à la définition de la mère ou à celle de la fille ?

    Voilà un bout de code qui montre ce que je voudrais faire :

    #include "iostream"
    
    class Mere
    {
       public :
        
       virtual void A()
       {
          cout << "Fonction de la mère";
       }
    };
    
    class Fille : public Mere
    {
       public :
       
       virtual void A()
       {
          cout << "Fonction de la fille";
       } 
    };
    
    int main()
    {
       Mere *mere = NULL;
       Fille fille;
    
       *mere = fille;
        
       mere->A();// -> Quelle fonction est appelée ?
    
    
    
      return 0;
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
      8 mai 2008 à 21:37:00

      Et si tu essayais pour voir ? :)

      T as déjà écrit tout le code !
      • Partager sur Facebook
      • Partager sur Twitter
      Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
        9 mai 2008 à 2:42:36

        Celle de la fille, car la méthode de la mère est virtuelle. Il descendra donc jusqu'en bas de la hiérarchie.

        En passant, NULL est déprécié. Utilise 0 à la place.
        • Partager sur Facebook
        • Partager sur Twitter
          9 mai 2008 à 14:11:06

          C'est tout le principe de la substituabilité.

          PS: arrétez de prendre le choux avec NULL et 0. Tous les gurus ne sont pas d'accord sur le sujet, et le prochain standard introduira (enfin -- là c'est mon avis) "nilptr" pour faire plaisir à tout le monde.
          • Partager sur Facebook
          • Partager sur Twitter
          C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
            9 mai 2008 à 14:18:03

            tu risque d'avoir des soucis avec ton include :
            #include "iostream"
            

            il faut metre des chevrons <>
            #include <iostream>
            
            • Partager sur Facebook
            • Partager sur Twitter
            :)
              9 mai 2008 à 14:24:11

              il auras plus de ceci avec
              *mere = fille;
              
              qui lui fera une violation d'accès mémoire !

              mere = &fille;
              
              • Partager sur Facebook
              • Partager sur Twitter

              Problème Héritage avec fonctions virtuelles et substitution

              × 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