Equivalent C++ de getClass().getName() - C++ - Programmation
Marsh Posté le 16-06-2006 à 15:12:40
une methode virtuel retournant le nom de la classe suffit
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
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).
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.
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
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 ...
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
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"
Merci encore
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 ...
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?
Marsh Posté le 17-06-2006 à 16:30:27
Ok
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
Marsh Posté le 17-06-2006 à 16:31:43
"virtual constructor" i feel lucky
Marsh Posté le 17-06-2006 à 16:45:25
J'etais deja tomber sur ce site 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 ...
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à.
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
Marsh Posté le 17-06-2006 à 20:02:48
Code :
|
Et d'ailleurs, en Java, tu ferais pareil, tu n'utiliserais surtout pas getClass().getName()
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
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