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

SL & STL C++ Discussion :

unique conteneur pour plusieurs classes dérivées


Sujet :

SL & STL C++

  1. #1
    Inactif
    Inscrit en
    Avril 2009
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 55
    Par défaut unique conteneur pour plusieurs classes dérivées
    salut,

    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
     
    class Descriptor{
    public:
    //les constructeurs............;
    int gettag() const;
    private:
    char* payload;
    }
     
    class SpecialDescriptor: public Descriptor{
    //les methodes et attribut de la classe dérivée
     
    }
     
    // et je definie plusieur classes dérivées.
    et supposant que je suis entrain de parser un buffer et ainsi j'instancie l'un des types dérivé de la classe Descriptor et ainsi je les stoke dans un vector

    j'arrive à stoker toutes les instances dans un seul vector de type Descriptor
    en utilisant le cast
    Néanmoins lorsque je veux acceder à une methodes dédiée à une classe le compilateur me signale un erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class Descriptor’ has no member named ‘getXXXXX'
    que dois faire sachant que j'ai plusieurs types de classes dérivées et que la definition d'un conteneur à chaque type de classe dérivée ne sera pas adéquat à mon cas d'utilisation?

    merci d'avance!!!

  2. #2
    Membre chevronné
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Par défaut
    Bonjour,

    Déjà, rassure-moi, il s'agit bien d'un std::vector<Descriptor*> et non d'un std::vector<Descriptor> ?

    Ensuite, renseigne-toi sur le design pattern Visitor. Je pense qu'il devrait répondre à ton problème.
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  3. #3
    Inactif
    Inscrit en
    Avril 2009
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 55
    Par défaut
    bon pour le Desriptor* tu as raison
    pour ta solution ????

  4. #4
    boli_971
    Invité(e)
    Par défaut
    Salut,
    Il n'y à pas de cast à utiliser ici, il faut que tu fasses un vector de Descriptor* et que tu définisses virtual les fonctions, dans les classes dérivés, par exemple SpecialDescriptor, tu (re)définis les fonctions déclarés virtuelles dans la classe de base, ainsi, à l'appel de la fonction sur un Descriptor*, c'est celle de la vraie classe dérivée qui sera utilisée.
    C'est peut être pas très claire, mais je te laisse t'informer sur le polymorphisme pour des informations plus claire et précises.

  5. #5
    Inactif
    Inscrit en
    Avril 2009
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 55
    Par défaut
    oui le polymorphisme est peu etre une solution mais je voudrai bien échapper cette solution car j'ai plusieurs classes dérivées et des centaines des methodes, et definir ces methodes comme virtual puis les developper chaque dans sont contextes?????

  6. #6
    Membre chevronné
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Par défaut
    Quand tu veux mettre des objets de type différents mais descendant d'une même classe dans un conteneur, tu peux le faire sous une des 2 conditions suivantes:

    - Tu sais récupérer le type de la spécialisation
    - Toutes les méthodes que tu vas utiliser sont implémentées ou virtuelle pure dans ta classe de base.

    La première solution consiste à implémenter une fonction virtuelle dans la classe de base et de la redéfinir dans la classe enfant afin de pouvoir récupérer son type réel.
    (ou utiliser typeid, mais je suis pas sûr de comment ça fonctionne selon les architectures). Pour ensuite faire un cast.

    La seconde solution consiste à déclarer des méthodes virtuelles (pures ou pas, selon ton choix, mais en général il est conseillé de dériver d'une interface et d'utiliser les méthodes de cette interface (dont toutes les méthodes sont virtuelles pures)). Et de les appeller directement.

    Je te conseillerais d'utiliser la seconde solution.

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

Discussions similaires

  1. [Débutant] importation générique pour plusieurs classes
    Par hervane56 dans le forum C#
    Réponses: 2
    Dernier message: 03/05/2013, 13h05
  2. Réponses: 2
    Dernier message: 16/12/2009, 13h36
  3. Réponses: 1
    Dernier message: 02/08/2008, 00h05
  4. Manager unique pour plusieurs instances ?
    Par siddh dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 18/09/2006, 09h47
  5. [VBA-E]une macro unique pour plusieurs fichiers excel
    Par fanchic29 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/04/2006, 16h20

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