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 de downcasting


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut Pb de downcasting
    Bonjour à tous,

    je me retrouve dans cette situation :

    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
    32
    class Base
    {
     int m_a;
     virtual void f() = 0;
    };
     
     
    class Derivee1 : public Base
    {
      void f();
      int m_data;
    };
     
    class Derivee2 : public Base
    {
      void f();
      int m_size;
    };
     
    class Type
    {
       Base* m_p;
       int m_id;
       ...
     
    };
     
    class Test
    {
      list<Type*> m_list;
      Derivee1* GetPtrByIdType(int idType);
    };

    La liste m_list de la classe Test est construite avec des Type* dont le m_p est un Derivee1*.
    Ainsi, pour récupérer le m_p, j'utilise la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Derivee1* Test::GetPtrByIdType(int idType);
    Comment faire pour que dans ma fonction GetPtrByIdType() je n'ai pas de downcasting à faire ?
    En effet ma recherche par id me retourne un Base* que je dois caster en Derivee1*.

    Je ne trouve pas ça trés propre.
    Quelle est la solution à conseiller ?

    @+

  2. #2
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    template <typename T>
    class Type {
       T* m_p;
       //...
    };
     
     
    List<Type<Derivee1> *> m_list;
    est une solution (pas tout à fait complète, je ne vérifie pas que T dérive de base, la généricité n'étant pas contrainte en C++, on doit utiliser de la métaprog pour y arriver). Je suis cependant hyper sceptique sur la raison d'être d'une classe "Type". Peux-tu être plus clair sur son utilisation ? Et sur le but du programme ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    Un exemple serait :

    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
    32
    33
    34
    35
    class Enfant
    {
     int m_age;
     virtual void f() = 0;
    };
     
     
    class Garcon : public Enfant
    {
      void f();
      int m_data;
    };
     
    class Fille: public Enfant
    {
      void f();
      int m_size;
    };
     
     
    class Jouet
    {
    //On associe un enfant à chaque jouet
       Enfant* m_p;
       int m_id;
       ...  
    };
     
     
     
    class PlacardGarcon
    {
      list<Jouet*> m_list;
      Garcon* GetPtrByIdType(int idType);
    };

    Mais peut être ce modele n'est pas suffisamment correct ??

    @+

  4. #4
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    C'est
    Garcon* GetPtrByIdType(int idType);
    que je ne comprends pas. Tu as sans doute voulu dire getEnfantByIdJouet ? Si c'est ça, la solution donnée plus haut est convenable.

    En général, si on veut faire joujou avec les types, les templates sont une solutions.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    Ben disons que je suis dans une classe "PlacardGarcon" où je sais que chacun des jouets de ma liste est associé à un Garcon*.

    Et c'est pour ça que je cherche à récupérer un Garcon*.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    Si qqun pouvait m'éclairer sur le bon schéma à utiliser ?

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

Discussions similaires

  1. Downcasting ou copie a travers un heritage ?
    Par enrikomic dans le forum Langage
    Réponses: 7
    Dernier message: 29/06/2007, 17h17
  2. Réponses: 13
    Dernier message: 02/03/2007, 14h43
  3. Downcasting et type
    Par Alfred12 dans le forum C++
    Réponses: 7
    Dernier message: 28/02/2007, 08h57
  4. [downcasting] fonction d'une classe fille
    Par poukill dans le forum C++
    Réponses: 7
    Dernier message: 28/07/2006, 16h26
  5. Downcasting
    Par Mookie dans le forum C++
    Réponses: 18
    Dernier message: 12/01/2005, 23h21

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