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 virtuelles


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Points : 574
    Points
    574
    Par défaut méthodes virtuelles
    Bonjour, j'ai une classe X avec 2 méthodes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class X
    {
       virtual node getNode () const = 0;
       virtual node getParent() const = 0;
    };
    et deux classes Y et Z qui héritent publiquement de X :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class Y : public X 
    {
       ...
       node getNode ();
       node getParent ();
    };
     
    class Z : public Y
    {
       ...
       node getNode ();
       node getParent ();
    };
    Je définis les fonctions virtuelles de X getNode et getParent dans les classes Z et Y et j'ai l'erreur de LINK suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    cannot instantiate abstract class due to following members:
    ... 
    see declaration of 'getNode'
    L'implémentation de ma méthode est toute simple (par exemple pour la classe Y :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    node Y::getNode ()
    {
       return (m_node);
    }
    Comment dois-je faire pour garder à l'identique ma classe X et instancier correctement Y et Z pour ne plus avoir d'erreur ?
    Je précise que ma classe X doit rester INCHANGEE.

    Le seul moyen que j'ai trouvé est de virer le et instancier mes méthodes pour la classe X. Au passage, quel est le rôle de l'écriture const = 0 svp ?
    Merci[/quote][/code]

  2. #2
    Membre expérimenté Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 886
    Points : 1 526
    Points
    1 526
    Par défaut
    Je pense que si les méthodes de la classe de base sont const, les méthodes virtuelles des classes dérivées doivent aussi l'être:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Y : public X 
    { 
       ... 
       node getNode () const; 
       node getParent () const; 
    };

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Points : 574
    Points
    574
    Par défaut
    j'ai essayé en enlevant le fait que la méthode soit const, ça a marché, et avec tya méthode aussi, je te remercie.

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

Discussions similaires

  1. Exceptions, héritage et méthodes virtuelles
    Par Nuwanda dans le forum C++
    Réponses: 13
    Dernier message: 23/05/2006, 12h06
  2. Appel d'une méthode virtuelles
    Par BIPBIP59 dans le forum C++Builder
    Réponses: 4
    Dernier message: 24/03/2006, 14h00
  3. Méthodes virtuelle et implémentation
    Par slate dans le forum C++
    Réponses: 2
    Dernier message: 16/02/2006, 17h16
  4. Comment l'appel à une méthode virtuelle....
    Par Blobette dans le forum C++
    Réponses: 7
    Dernier message: 07/12/2004, 13h55
  5. [C#] Méthode virtuelle
    Par jacma dans le forum Windows Forms
    Réponses: 4
    Dernier message: 07/11/2004, 08h18

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