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 multiple et cast primaire


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 57
    Points : 31
    Points
    31
    Par défaut Heritage multiple et cast primaire
    Bonjour,

    Voila j'ai une classe A qui derive de B.
    B derive de C et D.
    Et C derive de E

    Par un template je passe un objet de classe A dans une fonction qui voudrait recuperer un objet de classe E.

    Pour le moment je caste l'objet template A en E par (E*) mais du coup le cast ne fonctionne pas car j'ai D qui parasite le cast.

    Comment puis je faire pour recuperer l'objet en E en passant A?
    Merci pour l'aide apportée et surtout n'hesitez pas a me demander de preciser si je n'ai pas été assez clair

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Tu n'as pas besoin de caster qui que ce soit.

    Si j'ai bien tout compris, un objet de type A est aussi un object de type E.

    Donc :

    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
     
    void func1(A* e)
    { ... }
     
    void func2(E* e)
    {
    }
     
    int main()
    {
      A the_a;
     
      func1(&a); // OK
      func2(&a); // OK, sans avoir besoin de caster quiconque
    }
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 57
    Points : 31
    Points
    31
    Par défaut
    Le probleme c'est que la fonction fait partie d'une classe qui n'est pas censé connaitre la classe A et qui du coup a besoin de recaster le template en classe E

  4. #4
    screetch
    Invité(e)
    Par défaut
    tu fais un C-cast et tu mérites de pourrir en enfer.
    Utilises static_cast

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 57
    Points : 31
    Points
    31
    Par défaut
    Sans connotation religieuse , le probleme c'est que le compilateur me fait crie dessus en me disant que je ne peux pas caster le template de A vers E soit en static cast soit en dynamic_cast ...

  6. #6
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par afan Voir le message
    Le probleme c'est que la fonction fait partie d'une classe qui n'est pas censé connaitre la classe A et qui du coup a besoin de recaster le template en classe E
    Je ne comprends pas. Il y a quelque chose qui ne vas pas, ou que tu ne nous dis pas.

    Est-ce que tu peux écrire un code minimal pour reproduire ton problème ? Parce que j'ai un doute très fort sur la validité de ton approche là.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  7. #7
    screetch
    Invité(e)
    Par défaut
    si ton C-cast echoue (normalement il pourrait marcher) c'est que tu n'as pas la définition de A
    donc il ne sait pas comment passer d'un A a un E
    tu as donc deux solutions:

    - l'include de A pour avoir tout l'héritage. Dans ce cas ton C-cast marchera mais tu iras quand même pourrir en enfer
    - l'include de A et le static_cast qui dans ce cas va marcher et en plus sera la version C++, sauvera ton âme et quand le croque mort t'emportera, il te conduira a travers ciel au père etetnel (pom POM POM pom POM POM)

  8. #8
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par screetch Voir le message
    si ton C-cast echoue (normalement il pourrait marcher) c'est que tu n'as pas la définition de A
    donc il ne sait pas comment passer d'un A a un E
    tu as donc deux solutions:

    - l'include de A pour avoir tout l'héritage. Dans ce cas ton C-cast marchera mais tu iras quand même pourrir en enfer
    - l'include de A et le static_cast qui dans ce cas va marcher et en plus sera la version C++, sauvera ton âme et quand le croque mort t'emportera, il te conduira a travers ciel au père etetnel (pom POM POM pom POM POM)
    Si la définition de A est connue, alors il n'y a même plus besoin de static_cast<>, ce qui rends le paradis encore plus accessible
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  9. #9
    screetch
    Invité(e)
    Par défaut
    ah oui pas con

Discussions similaires

  1. [C#] Heritage multiple -> comment faire autrement
    Par schnourf dans le forum Windows Forms
    Réponses: 14
    Dernier message: 03/10/2006, 15h14
  2. heritage multiple
    Par r0d dans le forum C++
    Réponses: 6
    Dernier message: 21/04/2006, 09h40
  3. [POO] Héritage multiple Parent
    Par djshaker dans le forum Langage
    Réponses: 15
    Dernier message: 15/03/2006, 17h35
  4. Réponses: 9
    Dernier message: 25/05/2005, 18h17
  5. [Kylix] heritage multiple et interfaces :(
    Par le_barbu dans le forum EDI
    Réponses: 4
    Dernier message: 26/01/2004, 19h30

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