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

  FORUM HardWare.fr
  Programmation
  C++

  Equivalent C++ de getClass().getName()

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Equivalent C++ de getClass().getName()

n°1389081
esox_ch
Posté le 16-06-2006 à 14:59:38  profilanswer
 

Bonjour,
 
J'ai un vecteur contenant des pointeurs sur des objets de nature heterogène. Ensuite j'aimerais pouvoir recuperer le nom de la classe a laquelle se rapporte l'instance . genre mon vecteur est : vector <Object*> vec; , ensuite j'y colle dedans "carré , rectangle,..." qui heritent tous d'objet et j'aimerais pouvoir recuperer qui est un carré, qui un rectangle & co ....
 
Est-ce que vous pouvez m'aider ?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
mood
Publicité
Posté le 16-06-2006 à 14:59:38  profilanswer
 

n°1389109
skelter
Posté le 16-06-2006 à 15:12:40  profilanswer
 

une methode virtuel retournant le nom de la classe suffit

n°1389126
esox_ch
Posté le 16-06-2006 à 15:21:03  profilanswer
 

Oui j'imagine, mais je voulais savoir s'il y a une maniere "interne" au langage, sans devoir mettre des methodes qui font ça ...
Mais merci :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1389139
skelter
Posté le 16-06-2006 à 15:31:18  profilanswer
 

oui, avec l'operateur typeid mais faut voir qu'elle est efficacite par rapport a l'appel d'une methode virtuelle, et aussi si la chaine retournee decrivant le type est portable (je ne sais pas).

n°1389289
++fab
victime du syndrome IH
Posté le 16-06-2006 à 17:18:11  profilanswer
 

skelter a écrit :

... et aussi si la chaine retournee decrivant le type est portable (je ne sais pas).


Dommage, elle ne l'est pas.

n°1389391
skelter
Posté le 16-06-2006 à 20:41:58  profilanswer
 

ok merci, je m'en doutais car semble lié au procédé de décoration des noms qui dépend de l'implémentation

n°1389512
Taz
bisounours-codeur
Posté le 17-06-2006 à 02:46:07  profilanswer
 

n'importe quoi ... tu fais un dynamic_cast et c'est tout. C'est quoi ces bêtises de regarder le nom de la classe ...

n°1389528
esox_ch
Posté le 17-06-2006 à 07:25:49  profilanswer
 

La raison pour laquelle je "dois" regarder le nom de la classe, est que je dois parfois construire un nouvel object du même type qu'un des elements du tableau . Je vais regarder du coté de ton dynamic_cast :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1389566
Taz
bisounours-codeur
Posté le 17-06-2006 à 09:57:06  profilanswer
 

dynamic_cast + 'virtual constructor'

n°1389576
esox_ch
Posté le 17-06-2006 à 10:34:03  profilanswer
 

Ok :) Merci, je vais devoir me renseigner un peu, parce qu'avec le peu de cours qu'on a eu, ils nous ont juste dit "un constructeur ne peut jamais être virtuel" :D
Merci encore


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
mood
Publicité
Posté le 17-06-2006 à 10:34:03  profilanswer
 

n°1389601
Taz
bisounours-codeur
Posté le 17-06-2006 à 11:47:53  profilanswer
 

ben c'est le cas, mais s'il t'ont aussi appris google, tu devrais y arriver ...

n°1389609
esox_ch
Posté le 17-06-2006 à 12:10:59  profilanswer
 

Donc , j'ai fait quelques recherches et je suis notamment tombé sur :
http://www-kp3.gsi.de/www/dox_dev/ [...] #glo_clone
 
Donc si j'ai bien compris , dans la classe object je mets une metode virtuelle pure Clone(Object *) const; , ensuite dans toutes les sous-classes j'implemente une metode retournant new Carre(*this); par exemple?  
Mais c'est à quel moment que j'utilise le dynamic_cast?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1389681
Taz
bisounours-codeur
Posté le 17-06-2006 à 16:00:36  profilanswer
 

ah ben on t'as pas appris google, dommage.

n°1389698
esox_ch
Posté le 17-06-2006 à 16:30:27  profilanswer
 

Ok :p
Donc je continue mon googlage et apperemment il faut que je comprenne la réponse à cette question : http://www.thescripts.com/forum/thread131196.html
 
Je crois que je commance lentement à comprendre ... Parcontre Taz si tu as un site "miracle" où tout est super bien expliqué je suis bien entendu preneur ... même si j'imagine que tu considère que l'auto-formation (autant en googlage que dans le reste) est la voie :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1389699
Taz
bisounours-codeur
Posté le 17-06-2006 à 16:31:43  profilanswer
 

"virtual constructor" i feel lucky


Message édité par Taz le 17-06-2006 à 16:32:17
n°1389703
esox_ch
Posté le 17-06-2006 à 16:45:25  profilanswer
 

J'etais deja tomber sur ce site :D sauf qu'encore une fois il ne parle pas de dynamic_cast ...  Parceque à ce que j'ai compris , le dynamic_cast sert à caster un pointeur en un autre type de pointeur, sauf qu'il faut savoir a l'avance en quel type de pointeur, ce qui n'est pas mon cas ... Tout ce que je veux c'est creer un autre pointeur du même type que le premier ...


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1389724
Taz
bisounours-codeur
Posté le 17-06-2006 à 18:19:02  profilanswer
 

t'as le droit de lire le reste de la faq ... est puis dynamicast c'est un opérateur du langage, donc tu trouves ça dans ton cours ou dans ton libre.
 
Ce que tu dis n'a pas de sens. Tu manipules de Objet* et tu veux savoir si une Voiture qui est pointée ?
 
if (Voiture *v = dynamic_cast<Voiture*>(o)) { c'est une voiture }
 
 
mais si tu veux juste créer un nouvel objet du même type que celui-ci :
 
Object *b = a->create();
 
et voilà.

n°1389746
esox_ch
Posté le 17-06-2006 à 19:03:49  profilanswer
 

Tu as raison, je vais le relire un peu mieux.  
Ce que je dois faire est :
J'ai un vecteur de pointeurs sur des objets ( p.ex [voiture, avion, voiture, velo]) où tous ces pointeurs pointent sur des instances de classes heritant d'objet. Maintenant, quand je fais vecteur[index] je recupere un objet, et je veux pouvoir savoir de quel type il est (voiture, avion,...) pour pouvoir appeler le constructeur de copies et le "dupliquer".  
J'espere m'être fait un peu mieux comprendre, je te remercie pour ton aide et m'en vais sur ce pas relire la doc comme il faut :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1389762
Taz
bisounours-codeur
Posté le 17-06-2006 à 20:02:48  profilanswer
 

Code :
  1. Vehicule *v = vehicules[i]->create(); // créer un nouveau véhicule du même type que *vehicules[i]
  2. Vehicule *w = vehicules[i]->clone(); // créer une copie du véhicule


 
Et d'ailleurs, en Java, tu ferais pareil, tu n'utiliserais surtout pas getClass().getName()

n°1389774
esox_ch
Posté le 17-06-2006 à 20:41:54  profilanswer
 

Oui avec clone(); mais sur le coup j'avais pensé prendr ele nom de la classe , faire un switch dessus et appeller le constructeur de copie ... mais apres 1.5 sec de reflexion faut admettre qu'il faudrait y aller pour faire plus sale :heink:


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1389824
bjone
Insert booze to continue
Posté le 18-06-2006 à 01:28:20  profilanswer
 

surtout plus lent :D

mood
Publicité
Posté le   profilanswer
 


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

  Equivalent C++ de getClass().getName()

 

Sujets relatifs
Équivalent "onLoad=print()", genre "onLoad=saveas()" ?[Résolu] [VBS] Je cherche l'équivalent de net use * /delete /yes
Existe-t-il un équivalent au StringGrid de Delphi ?Script equivalent a dl.free.fr
Equivalent des WebParts 2.0 de .NET ??[CSS] Equivalent a vertical-align: avec DIV?
Equivalent jad pour passer du .java au .jspEquivalent de plusieurs COUNT(x WHERE y = z) dans une requête ?
equivalent mysql myadminExiste-t-il un equivalent à eval(); qui retourne le resultat ?
Plus de sujets relatifs à : Equivalent C++ de getClass().getName()


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