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

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

Marsh Posté le 16-06-2006 à 14:59:38    

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
Reply

Marsh Posté le 16-06-2006 à 14:59:38   

Reply

Marsh Posté le 16-06-2006 à 15:12:40    

une methode virtuel retournant le nom de la classe suffit

Reply

Marsh Posté le 16-06-2006 à 15:21:03    

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
Reply

Marsh Posté le 16-06-2006 à 15:31:18    

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).

Reply

Marsh Posté le 16-06-2006 à 17:18:11    

skelter a écrit :

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


Dommage, elle ne l'est pas.

Reply

Marsh Posté le 16-06-2006 à 20:41:58    

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

Reply

Marsh Posté le 17-06-2006 à 02:46:07    

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 ...

Reply

Marsh Posté le 17-06-2006 à 07:25:49    

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
Reply

Marsh Posté le 17-06-2006 à 09:57:06    

dynamic_cast + 'virtual constructor'

Reply

Marsh Posté le 17-06-2006 à 10:34:03    

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
Reply

Marsh Posté le 17-06-2006 à 10:34:03   

Reply

Marsh Posté le 17-06-2006 à 11:47:53    

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

Reply

Marsh Posté le 17-06-2006 à 12:10:59    

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
Reply

Marsh Posté le 17-06-2006 à 16:00:36    

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

Reply

Marsh Posté le 17-06-2006 à 16:30:27    

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
Reply

Marsh Posté le 17-06-2006 à 16:31:43    

"virtual constructor" i feel lucky


Message édité par Taz le 17-06-2006 à 16:32:17
Reply

Marsh Posté le 17-06-2006 à 16:45:25    

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
Reply

Marsh Posté le 17-06-2006 à 18:19:02    

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à.

Reply

Marsh Posté le 17-06-2006 à 19:03:49    

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
Reply

Marsh Posté le 17-06-2006 à 20:02:48    

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()

Reply

Marsh Posté le 17-06-2006 à 20:41:54    

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
Reply

Marsh Posté le 18-06-2006 à 01:28:20    

surtout plus lent :D

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed