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 :

retourner le nom de la classe


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Par défaut retourner le nom de la classe
    salut tous le monde,
    dans mon application, je voudrais rerourner le nom de la classe de l'objet à tester, je ne connais que les methode "IsKingOf" et "RUNTIME_CLASS" de MFC, mais il me faut d'autres methode qui n'utilise pas le MFC, car mon application n'utilise pas de MFC.
    j'ai penser à utilisé "typeid" mais je ne suis pas arriver a ce que je veux.
    si quequ'un a une idéé n'hésiter pas.
    Merci d'avance!!!!

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 58
    Par défaut
    il faut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typeid(ma_classe).name()

  3. #3
    Invité
    Invité(e)
    Par défaut
    la vraie question est : pourquoi as tu réellement besoin de faire cela ?

  4. #4
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Par défaut
    je l'ai déja fait, mais je n'aurait pas les résultats attendus.
    par example:
    ClassDerive* pd = new Derived;
    ClassBase* pb = pd;

    cout << typeid( pb ).name() << endl; //prints "class Base *"
    cout << typeid( pd ).name() << endl; //prints "class Derived *"
    cout << typeid( *pd ).name() << endl; //prints "class Derived"
    cout << typeid( *pb ).name() << endl; //prints "class Derived"

    lors de l'éxécution les 2 derniéres lignes génére une erreur, et j'en est besoin de ces 2dernier ligne de code pour savoire sur quoi pointe "*pd" et "*pb".

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 58
    Par défaut
    ce serait pas plus simple d'utiliser le debugger?
    c'est quoi le message d'erreur que tu as? il ne te demande pas d'activer les RTTI par hasard?

  6. #6
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 46
    Par défaut
    Bonjour,

    dans l'immense majorité des cas, lorsqu'on a besoin de faire cela c'est qu'il y a une erreur de conception.
    Le c++ n'est pas approprié pour ce genre de choses qui touchent à la réflexivité. Je ne sais pas si c'est une bonne solution, mais j'ai parfois vu des classes qui proposent une fonction membre statique GetType() qui retourne (codé en dur) le nom de la classe.

  7. #7
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Pour que ça marche, il faut : Que le RTTI soit activé (msvc 6 ne n'active pas par défaut). De plus, la classe de base doit avoir au moins une fonction virtuelle.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  8. #8
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Par défaut
    merci pour vos efforts,
    mon probléme est que je veux tester si un objet_A est de classe A ou non,
    ce test inclu ausssi les classes de base de la classe A.
    c'est à dire:
    si objet_A est de type classe A ou elle est de type de l'une des classes mére de A alors .... sinon .......

    merci d'avance!!

  9. #9
    Invité
    Invité(e)
    Par défaut
    et si, avec un design plus orienté objet, tu avais utilisé le polymorphisme ? ca n'aurait pas pu le faire ?

  10. #10
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par scorpion06
    classe A ou elle est de type de l'une des classes mére de A alors .... sinon .......
    C'est étrange comme besoin... C'est l'inverse de ce qu'on utilise généralement. Tu aurais remplacé mère par fille, j'aurais répondu sans hésiter dynamic_cast, avec les précautions d'usage comme quoi une fonction virtuelle est souvent un meilleur choix, mais là, j'ai vraiment du mal à voir à quoi ce genre d'information peut bien te servir...
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

Discussions similaires

  1. GetType() ne retourne pas le nom de la classe
    Par maa dans le forum Langage
    Réponses: 2
    Dernier message: 15/10/2008, 18h24
  2. Réponses: 9
    Dernier message: 12/04/2007, 17h08
  3. [POO] Instancier un objet avec le nom de la classe
    Par shinchun dans le forum Langage
    Réponses: 4
    Dernier message: 08/06/2006, 13h44
  4. Réponses: 10
    Dernier message: 04/03/2006, 22h34
  5. Réponses: 7
    Dernier message: 03/12/2004, 12h40

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