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 :

tester si un champs existe dans une classe, est-ce possible ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut tester si un champs existe dans une classe, est-ce possible ?
    Bonjour,

    J'ai une classe abstraite Personne (un nom et un prenom) et après j'ai des classes filles Etudiant (annee) et Prof (matiere) qui chacun contient un nouveau champ particulier.

    Par la suite, j'aimerais savoir respectivement combien j'ai d'Etudiant et combien j'ai de Prof dans ma liste de Personne.

    Alors j'aimerais savoir si c'est possible de parcourir la liste et en testant à chaque fois sur chaque personne si il y a le champ matiere par exemple, c'est un prof donc j'incrémente de +1 un compteur... etc

    Ou alors je suis obligé de passé par un champ type a introduire dans ma classe personne pour pouvoir les différencier ?

    Merci

    ++

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Tu as deux solutions:

    La première consiste à créer un champs (énumération, pourquoi pas ) qui indiquera s'il s'agit d'un prof ou d'un eleve.

    La deuxième consiste à essayer d'effectuer un dynamic_cast de ta personne en (éleve, par exemple).

    Si le pointeur renvoyé par le dynamic_cast est nul, c'est que la conversion a échoué, et donc que ce n'est pas une personne du type que tu espérais obtenir... sinon, c'est que c'est que tu as bien affaire au type testé

    Mais autrement, il n'y a pas vraiment de moyen de vérifier la présence d'un champs, en dehors de la possibilité de tester si un pointeur est NULL ou non... et comme il n'y aurait aucun sens à mettre les champs propres aux profs et les champs propres au élèves sous forme de pointeur dans ta classe abstraite... et que tu te retrouverais confronté à l'éternel problème de la gestion de pointeur...
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut
    La deuxième solution me va très bien mais comment on fait un dynamic_cast ? La différence avec un cast ?

    Enfin comment on fait concrètement quoi ?

    Merci
    ++

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    ben en gros
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(dynamic_cast<Eleve*> (tapersonne)!=NULL)
         /*C'est un éleve */
    else
        /*C'est un prof */
    (ici, tapersonne est un pointeur... donc, prend l'adresse de la variable si ce n'est pas le cas )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut
    Oki merci impeccable on en apprend tous les jours lol

    Merci

    Bonne soirée

  6. #6
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Je considère que le coup du dynamic_cast pour savoir si ta variable est un prof ou un élève relève une mauvaise conception de ton programme.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

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

Discussions similaires

  1. tester si un mot existe dans une phrase
    Par rimenis dans le forum Langage
    Réponses: 7
    Dernier message: 15/04/2013, 11h23
  2. [Débutant] Ptit Question : tester si un caractère existe dans une liste
    Par abd75web dans le forum VB.NET
    Réponses: 11
    Dernier message: 03/02/2013, 09h11
  3. [AC-2007] Savoir si un champ existe dans une table
    Par Guns Of The Patriots dans le forum VBA Access
    Réponses: 5
    Dernier message: 08/03/2010, 10h30
  4. rendre une partie d'une phrase variable dans une cellule, est ce possible?
    Par voldo2142 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/02/2008, 09h08
  5. [POO] Classe interne à une classe, est ce possible ?
    Par Matth_S dans le forum Langage
    Réponses: 13
    Dernier message: 10/02/2006, 10h24

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