Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1663 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [c++] probleme de comparaison de type d'objets derivés

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c++] probleme de comparaison de type d'objets derivés

n°707586
PowerKiwiX
Posté le 24-04-2004 à 01:23:46  profilanswer
 

Salut,
 
bon voila, j'ai une petite fonction qui m'embete un peu.
voici une idée du code :
 
...
for (int x = 0 ; x < v.size(); x++){
   Bloc* temp = v[x];
   if (ident == "NAME" ){
 if (typeid(temp) == typeid(BlocNAME)) return (BlocNAME*)temp;
   }
   if (ident == "FAMC" ){
 if (typeid(temp) == typeid(BlocFAMC)) return (BlocFAMC*)temp;
   }
...
 
le probleme se situe a la comparaison, les objets BlocNAME & BlocFAMC dérivent tous les deux de l'objet Bloc. L'objet temp récuperé peut être un BlocNAME, un BlocFAMC,etc .Cependant, lorsque c'est le cas, la comparaison echoue. Le compilo compare un objet de type Bloc avec un objet de type BlocNAME(/ou BlocFAMC) et par conséquent ne les trouve jamais du même type.
--> Comment tester dynamiquement le type d'un objet dérivé ???
 
Merci d'avance.

mood
Publicité
Posté le 24-04-2004 à 01:23:46  profilanswer
 

n°707598
blackgodde​ss
vive le troll !
Posté le 24-04-2004 à 02:47:05  profilanswer
 

return (BlocNAME*)temp;
return (BlocFAMC*)temp;
 
- une fonction n'a qu'un seul type de retour
- ces transtypages sont ceux du C !
 
utilise dynamic_cast :
 

Code :
  1. for (std::vector<Bloc*>::size_type x = 0 ; x < v.size(); ++x)
  2. {
  3.    BlocNAME *obj1 = dynamic_cast<BlocNAME*>(v[x]);
  4.    if(obj1)
  5.    {
  6.       // travail avec le type BlocNAME
  7.    }
  8.    BlocFMAC *obj2 = dynamic_cast<BlocFMAC*>(v[x]);
  9.    if(obj2)
  10.    {
  11.       // travail avec le type BlocFMAC
  12.    }
  13. }


Message édité par blackgoddess le 24-04-2004 à 02:47:37

---------------
-( BlackGoddess )-
n°707627
Enidan
Posté le 24-04-2004 à 11:22:05  profilanswer
 

BlackGoddess a écrit :


Code :
  1. for (std::vector<Bloc*>::size_type x = 0 ; x < v.size(); ++x)




 
Quelle est la différence entre ton écriture et un simple :

Code :
  1. for (int x = 0 ; x < v.size(); ++x)


n°707628
Taz
bisounours-codeur
Posté le 24-04-2004 à 11:22:48  profilanswer
 

bof. autant tirer parti aux maximun d'une petit feature à la con donc l'histoire est longue
 

Code :
  1. // je défini juste pour bien marteler le destructeur virtuel
  2. class Bloc
  3. {
  4. public:
  5.   virtual ~Bloc()
  6.   { }
  7. };
  8. class BlocNAME
  9.   : public Bloc
  10. {
  11. public:
  12.   virtual ~BlocNAME()
  13.   { }
  14. };
  15. class BlocFMAC
  16.   : public Bloc
  17. {
  18. public:
  19.   virtual ~BlocFMAC()
  20.   { }
  21. };
  22. #include <vector>
  23. int main()
  24. {
  25.   std::vector<Bloc*> v;
  26.   v.push_back(new BlocFMAC);
  27.   v.push_back(new BlocNAME);
  28.  
  29.   // bof
  30.   // y a des grosses discussions la dessus
  31.   // bien sur le size_type est bien,
  32.   // maitenant, pour la légèreté, size_t / unsigned devrait aller
  33.   // vu qu'on peut raisonnablement supposer que size_type   
  34.   // est un typdef d'un de ces types
  35.   for(std::vector<Bloc*>::size_type x = 0 ; x < v.size(); ++x)
  36.     { 
  37.       if(BlocNAME *obj1 = dynamic_cast<BlocNAME*>(v[x]))
  38.       {
  39. // travail avec le type BlocNAME
  40.       }
  41.      
  42.       if(BlocFMAC *obj2 = dynamic_cast<BlocFMAC*>(v[x]))
  43.       {
  44. // travail avec le type BlocFMAC
  45.       }
  46.     }
  47. }

n°707630
Taz
bisounours-codeur
Posté le 24-04-2004 à 11:23:54  profilanswer
 

enidan a écrit :

Quelle est la différence entre ton écriture et un simple :

Code :
  1. for (int x = 0 ; x < v.size(); ++x)



size() renvoie un type entier non signé de type exact size_type.
1) donc int peut poser problème
2) int peut te faire un warning
3) on me dit que c'est sensé faire du meilleur code asm

n°707633
Enidan
Posté le 24-04-2004 à 11:28:03  profilanswer
 

D'ac, merci Taz :)

n°707670
Taz
bisounours-codeur
Posté le 24-04-2004 à 12:48:29  profilanswer
 

pk > t'avais les destructeurs virtuels ou pas ?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [c++] probleme de comparaison de type d'objets derivés

 

Sujets relatifs
besoin d'aide pour la fonction socket probleme avec freeProblème de compilation
Problème de compilation ![Tomcat/JDBC] Problème de configuration Tomcat et de connexion Oracle
[Apache] Probleme d'URL[JS] Type de variable [RESOLU]
comparaison de chaine mais de nombre :-/Problème de taille... de requête!!!!(Excel)
[Assembleur] Problème de définition de variable ? 
Plus de sujets relatifs à : [c++] probleme de comparaison de type d'objets derivés


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR