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 :

Comprendre la philosophie du dynamic_cast


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 15
    Points : 9
    Points
    9
    Par défaut Comprendre la philosophie du dynamic_cast
    Bonjour a tous,

    j'ai du mal a saisir toutes les subtilites du dynamic_cast.
    Voilà ce que je comprends, remettez moi sur la bonne voie

    Dans le cadre du "upcasting", a priori le cas le plus utilisé, l interet est la conversion d'un objet en un objet de type de base. Il s'agit d'une conversion dynamique controlee.
    Bien que celle ci se fasse automatiquement dans cet exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class A { };
    class B : public class A {};
    B toto; 
    void f(A& p) // un objet de type B peut etre fourni et sera traite en tant que A
    { }
    f(toto); // conversion automatique
    on a surement besoin des fois de contrôler la conversion, notamment si certaine base sont privées etc...

    Dans le cadre du downcasting, je ne vois ni l'application ni comment ca se passe dans la pratique... est ce qu'une construction par defaut est realisée pour "combler" les trous manquants entre A et B?
    Est ce quelqu un a des exemples concrets?

    Merci

  2. #2
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Un de mes premiers messages sur ce forum se trouve être plus ou moins la même question : http://www.developpez.net/forums/d98...amic_cast-faq/
    Tu y trouveras des réponses.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    Hola,

    merci pour ta reponse,

    Dans le cas de addwindow c'est du upcasting, du polymorphisme de base...
    Dans le cas de getfirstwindow on transforme la first window en mywindow car pas le choix avec cette fonction --> compris

    Mais la question est: a quoi ressemble p ? a un window + aux valeurs membres specifiques à un mywindow initialisé par le constructeur?

    Merci

  4. #4
    Membre confirmé Avatar de Lavock
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 560
    Points : 633
    Points
    633
    Par défaut
    p est un pointeur sur un MyWindow (ici "a"). Si jamais tu GetFirstWindow n'est pas un MyWindow, p sera Null.

    Le dynamic_cast c'est uniquement utile pour le downcast. As-tu lu la FAQ ?

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    J'ai cru lire dans le BS 3eme edition, que meme en upcast ca pouvait prévenir des etourderies genre conversion d'objet de classe protégée.

    Et sinon oui j'ai lu la FAQ...
    Mais peut etre que je ne me suis pas suffisament renseigné sur des sources différentes...

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Citation Envoyé par fabthegreat Voir le message
    Dans le cadre du downcasting, je ne vois ni l'application ni comment ca se passe dans la pratique... est ce qu'une construction par defaut est realisée pour "combler" les trous manquants entre A et B?
    Les fonctions virtuelles en C++ : Informations sur les types (dynamiques et statiques) et conversions
    Comment ça marche (incomplet, je suis en train de mettre à jour) : sur visual tu as 2 vpointer : un pour la table des fonctions virtuelles, et un sur un offset qui permet de retrouver la bonne adresse pour le typage dynamique. Sur gcc (MinGW), un seul vpointeur qui pointe sur une structure contenant ces deux informations : d'une part la vtable et de l'autre l'offset.

    Citation Envoyé par fabthegreat Voir le message
    Est ce quelqu un a des exemples concrets?
    Dans la réponse de Klaim, Luc Hermitte parle de multidispatch. Un tel exemple est le pattern visiteur : voir le billet d'Emanuel Deloget : V comme visiteur

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/02/2005, 10h42
  2. Réponses: 12
    Dernier message: 08/02/2005, 23h42
  3. [langage] comprendre une syntaxe particulière
    Par mat21 dans le forum Langage
    Réponses: 4
    Dernier message: 08/12/2004, 18h12
  4. [Concept][JavaBeans] Comprendre ?
    Par nicoo dans le forum Langage
    Réponses: 15
    Dernier message: 08/12/2004, 08h01
  5. [Procédure][java] A n'y rien comprendre
    Par Stessy dans le forum SQL
    Réponses: 2
    Dernier message: 18/03/2004, 15h05

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