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 :

Vérifier si un objet est une instance d'une classe


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 23
    Points : 26
    Points
    26
    Par défaut Vérifier si un objet est une instance d'une classe
    Bonjour à tous...

    Je cherche une fonction qui vérifie si un objet est une instance d'une classe passé en paramètre, ou qui renvoie la classe d'un objet passé en paramètre, un peut à la manière du instanceOf() de Java.

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 703
    Points
    10 703
    Billets dans le blog
    3
    Par défaut
    Dans quelle situation as tu besoin de faire ça ? Si l'instance est passee en paramètre, alors tu connais son tpe, du moins de base ?
    Sinon y'a pas d'introspection en C++. Tu peux utiliser dynamic_cast pour tenter des conversions ou bien jouter avec le RTTI et typeid.

  3. #3
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Points : 403
    Points
    403
    Par défaut
    Bonsoir,

    Utilisez typeid( myclass ).

    Cordialement.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 23
    Points : 26
    Points
    26
    Par défaut
    Un exemple : supposons une interface Joueur, implémentée en deux classes : Humain et Machine... Bien sûr, je crée deux pointeurs vers Joueur, mais l'objet pointé peut très bien être Humain ou Machine, vu qu'ils implémentent Joueur. Le but est donc de savoir si le Joueur est en fait un Humain ou une Machine...

    En ce qui concerne le typeid, j'avais trouvé cela après quelques recherches, mais j'ai du mal à saisir son fonctionnement, et le type_info qui va avec...

  5. #5
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 703
    Points
    10 703
    Billets dans le blog
    3
    Par défaut
    Une solution classique consiste à créer une fonction virtuelle pure "type()" dans Joueur que les classes filles supplantent afin de renvoyer le type de la classe ce qui permet de faire un dynamic_cast voire un static_cast derrière.
    Sinon dynamic_cast avec test de résultat.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 23
    Points : 26
    Points
    26
    Par défaut
    Merci, je crois que ta solution reste la plus simple et la moins couteuse...

  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
    Points : 16 213
    Points
    16 213
    Par défaut
    Pour l'exemple des échecs, le but est justement de ne pas savoir qui est l'humain et qui est la machine. Tout ce qu'on demande à ces classes, c'est de savoir produire le coup suivant.

    Tout ça pour dire que même si le downcast (d'un type de base vers un type dérivé) est possible en C++, c'est souvent une mauvaise idée (pareil qu'en Java, d'ailleurs). Pourquoi ? Par exemple, si on décide plus tard de créer un joueur MachineQueMemeLoicPeutBattre, si on n'a pas fait de downcast, il suffit de créer cette classe, et de changer le bout de code qui crée l'objet, c'est tout (même ce dernier point peut être réduit par l'intermédiaire de factories), c'est tout. Si on a fait du downcast, on doit parcourir l'ensemble du code à la recherche de ces downcasts pour ajouter la nouvelle classe partout.

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

Discussions similaires

  1. Utiliser une méthode d'une instance, dans une callback
    Par qdaemon_fr dans le forum Langage
    Réponses: 3
    Dernier message: 18/04/2014, 18h09
  2. [ATL] Utiliser une instance d'une règle dans une autre règle
    Par sacha33 dans le forum Eclipse Modeling
    Réponses: 0
    Dernier message: 02/06/2013, 23h41
  3. Ou est l'erreur - ou une différence entre une fonction et une macro ?
    Par Daranc dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/12/2009, 07h35
  4. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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