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 :

Héritage et redéfinition de fonctions


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Héritage et redéfinition de fonctions
    Bonjour,

    J'ai un petit souci, je n'arrive pas appeler la méthode type() de la classe dérivée pour les éléments de mon vecteur (voir la 2eme boucle for). Comment procéder?

    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
    #include <iostream>
    #include <string>
    #include <vector>
    using namespace std;
     
    class Pet {
      public:
        virtual string type() {
          return "Pet";
        }
    };
     
    class Bird : public Pet {
      public:
        string type() { return "Bird"; }
    };
     
    class Cat : public Pet {
      public:
        string type() { return "Cat"; }
    };
     
    int main() {
      Bird b;
      Cat c;
     
      vector<Pet> v;
      v.push_back(b);
      v.push_back(c);
     
      Pet * p[] = { &b, &c, };
     
      for(int i = 0; i < sizeof p / sizeof *p; i++)
        cout << p[i]->type() << endl;
     
      for(int i = 0; i < v.size(); i++)
        cout << v[i].type() << endl;
    }
    En sortie, j'ai :
    Et je voudrai (en passant absolument par un vecteur pour stocker mes données) :
    Elbourin

  2. #2
    Débutant
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Points : 176
    Points
    176
    Par défaut
    étant donné que ton vector stock des éléments de type Pet lorsque tu insère bird et cat dans ton vector, ces derniers sont automatiquement "raccourci" et ne sont désormais plus que objets de type Pet.
    il faut donc que tu stocks non pas tes objets par valeur mais par adresse pour que le mécanisme du polymorphisme s'effectue :

    bird * pBird = new bird;
    vector<Pet*> v;
    v.push_back( pBird );

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Typages dynamiques et typages statiques qui permettent la résolution à l'exécution de l'appel vers la fonction virtuelle ne sont différents que pour les pointeurs et les références.
    Cf Les fonctions virtuelles en C++

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonsoir,
    Merci à vous deux pour votre aide, le problème est résolu.
    Elbourin

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

Discussions similaires

  1. [POO] Héritage et redéfinition
    Par mamid1706 dans le forum C++
    Réponses: 6
    Dernier message: 07/05/2007, 17h25
  2. héritage et redéfinition de méthodes
    Par Braillane dans le forum Langage
    Réponses: 4
    Dernier message: 07/01/2007, 18h47
  3. [G++] Héritage et surcharge de fonction
    Par Beuss dans le forum Autres éditeurs
    Réponses: 11
    Dernier message: 15/05/2006, 09h18
  4. Réponses: 10
    Dernier message: 22/03/2006, 10h49
  5. Redéfinition de fonctions et de mots clés
    Par superjb dans le forum Langage
    Réponses: 6
    Dernier message: 10/10/2005, 16h36

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