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 :

Pb avec classe abstraite


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 27
    Par défaut Pb avec classe abstraite
    Bonjour,
    Quand je compile ce code :

    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
     
    class A
    {
        public:
           virtual void fun() = 0;
    };
     
    class B
    {
        public:
           virtual void fun() {}
    };
     
    class C : public A, public B
    { };
     
    C test;
    error: cannot declare variable `test' to be of type C
    error: because the following virtual functions are abstract:
    error: virtual void A::fun()

    Est-ce que c'est possible de faire que ça fonctionne, sans redéfinir la fonction dans la classe C ?

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Non. Telles qu'écrites, les fonction fun issues de A et de B n'ont aucun rapport entre elles.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre chevronné Avatar de icer
    Inscrit en
    Janvier 2006
    Messages
    332
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 332
    Par défaut
    Bonjour,

    L'héritage multiple est, en générale, à éviter. Tu ne peut vraiment pas faire autrement. Par exemple faire hériter C de B ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 27
    Par défaut
    Tu ne peut vraiment pas faire autrement
    En fait dans mon problème original, j'ai une classe patron de liste chainée qui hérite d'une liste chainée sans patron (avec des membres void *), et il y a des fonctions que je n'ai pas redéfini dans la sous-classe, comme isend(). Et on peut aussi étendre aussi la classe de liste chainée par l'héritage :

    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
     
    class listep
    {
       protected:
          void * membre;
          listep * next;
          /* ... */
       public:
         bool isEnd() { return next; }
         virtual void add (void * m) { /* en gros*/ next = new listep(m); }
    }
     
    class liste<class typemembre, class extendclass> : public listep, public extendclass
    {
        public:
          virtual void add (typemembre * m) 
              { next = new liste<typemembre,extendclass>(m); }
    }
     
    class myext
    {
       public:
         virtual bool isEnd() = 0;
         //Ajout de fonctions
         void fun();
    }
     
    //Erreur : la méthode virtuelle isEnd n'est pas défini
    liste<char *, myext> test;
    test.add("Yoplait");
    test.fun();
    mais bon de toute façon, redéfinir la fonction fun dans la classe C en inline qui appelle B::fun revient au même donc...

Discussions similaires

  1. Difficulté avec classe abstraite
    Par boobs60 dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 07/05/2012, 20h04
  2. Problème avec classe abstraite
    Par Antoniom dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 29/01/2011, 13h03
  3. Réponses: 5
    Dernier message: 07/06/2007, 17h47
  4. Erreur du designer avec héritage d'une classe abstraite
    Par Xzander dans le forum Windows Forms
    Réponses: 4
    Dernier message: 04/04/2007, 00h36
  5. Réponses: 6
    Dernier message: 27/07/2005, 09h06

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