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 :

Heritage Fonction abstraite, Probleme conteneur Heterogene


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 86
    Points : 59
    Points
    59
    Par défaut Heritage Fonction abstraite, Probleme conteneur Heterogene
    Bonjour a tous,

    j ai un petit souci d acces avec l heritage et les interfaces. Je dispose de 2 classes abstraites, l une heritant de l autre :
    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 IObject  
    { 
      public  : 
        virtual string    ToString() const = 0;             
        virtual string    GetType() const = 0; 
    } 
     
    class IOperand : public IObject  
    { 
      public: 
        virtual IObject*  Add(const IOperand &object) = 0;           
        virtual IObject*  Subtract(const IOperand &object) = 0;     
    }
    Voila donc ce sont 2 classes abstraites. Je doit donc , pour ouvoir implementer ces interfaces, les faire heriter.
    Donc je pense proceder ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class myclass : public IOperand 
    { 
     
    // bla bla 
    }
    Donc je dois definir le code de toutes les fonctions des interfaces puisque ce sont des methodes pures. Je vais creer plusieurs classes differentes qui heriteront de IOperand.
    Mon souci reside dans le stockage heterogene de ces classes. Je dois creer un conteneur de type IObject ( puisque les fonctions renvoie des IObject) mais comment faire pour appeler les methodes add et substract si je suis avec un type IObject. Je ne peux pas caster le IObject en IOperand !!!!! .

    Avez vous une solution ou une piste pour mes recherches.
    Merci d avance pour vos reponses.

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Salut !

    Pourquoi ne pas plutôt faire un conteur d'IOperand ?

    et pourquoi tes fonctions ne retourneraient pas des IOperand* ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 62
    Points : 48
    Points
    48
    Par défaut
    Pour résoudre ce problème, j'avais utilisé le RTTI (pour pouvoir utiliser le dynamic_cast).
    Ainsi tu peux faire un test de type: si c'est un IOperand je fais ca, c'est c'est une IMachin je fais ca, sinon c'est une erreur par exemple

Discussions similaires

  1. STL set et fonction membre du conteneur
    Par bobyjoe dans le forum SL & STL
    Réponses: 4
    Dernier message: 29/06/2007, 13h23
  2. Réponses: 3
    Dernier message: 24/06/2006, 15h05
  3. héritages multiples et fonctions abstraites
    Par julien.sagnard dans le forum C++
    Réponses: 4
    Dernier message: 21/10/2005, 14h58
  4. Fonction polymorphe et conteneur stl.
    Par Captain Fizzou dans le forum SL & STL
    Réponses: 2
    Dernier message: 29/11/2004, 19h13
  5. [langage] fonction sleep + probleme fenetre dos
    Par yokito dans le forum Langage
    Réponses: 2
    Dernier message: 30/08/2003, 19h46

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