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 :

Méthodes virtuelle et implémentation


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 41
    Points : 30
    Points
    30
    Par défaut Méthodes virtuelle et implémentation
    Bonjour,

    J'ai une classe abstraite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Element
    {
      public:
        virtual bool operator>(const Element &elt)=0;
    };
    avec donc une méthode virtuelle.

    Mon problème est de savoir comment implémenter cette méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Mot:Element
    {
      private:
        string mot;
      public:
        string getMot();
        //Retourne le mot
        bool operator>(const Element &elt);
    };
    Ici j'aimerai faire une implémentation de l'opérateur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    bool Mot::operator>(const Element &elt)
    {
    return getMot()>elt.getMot();
    }
    Or Element ne possède pas l'opérateur >(qui est virtuel), seul la classe Mot la possède. Or si j'essaie d'implémenter comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    bool Mot::operator>(const Mot &elt)
    {
    return getMot()>elt.getMot();
    }
    Le compilo me dit bien sûr que l'opérateur > n'a pas été implémenté et que Mot est par conséquent une classe abstraite

    Donc voilà, comment je fais?

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Tu ne peux pas procéder ainsi. Ici tu as besoin du type réel de deux éléments polymorphiques (les deux opérandes de la comparaison) ; or l'appel à une fonction vrituelle (ici ton opérateur >) ne permet d'accéder qu'au type réel du premier (via la liaison dynamique).

    Dirige-toi plutôt vers des techniques de double-dispatching (-> Google).

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    oki, je vais voir, merci

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 10/01/2013, 16h19
  2. Implémentation des méthodes virtuelles en c++
    Par nosferatu dans le forum Langage
    Réponses: 3
    Dernier message: 24/03/2011, 15h37
  3. Réponses: 17
    Dernier message: 29/07/2009, 18h12
  4. Réponses: 14
    Dernier message: 21/11/2008, 17h29
  5. Méthode virtuelle et implémentation
    Par sylvain.cool dans le forum C++
    Réponses: 5
    Dernier message: 19/06/2008, 15h33

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