RECONNAISSANCE DE TYPES D'OBJETS EN C++

cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 - 18 janv. 2006 à 11:00
profringo666 Messages postés 6 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 5 janvier 2007 - 5 janv. 2007 à 18:09
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/35631-reconnaissance-de-types-d-objets-en-c

profringo666 Messages postés 6 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 5 janvier 2007
5 janv. 2007 à 18:09
Moi ce qui m'interesserais ca serait de retrouver le type de l'objet alloue.
Ca pourrait etre pratique d'avoir direcment le type de l'objet qui n'est pas correctement desalloue quand on utilise un memory manager.

Car tres souvent on oublie de detruit les Singletons.
b Oo Messages postés 1 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 10 décembre 2006
10 déc. 2006 à 09:58
Bonjour,
c'est quand même pas exactement ça le résultat produit (au moins avec gcc).
Cela affiche le nom de la classe avec des chiffres.
Par exemple :
1A
Ceci car il faut differencier les objets.
koda_xii Messages postés 9 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 23 janvier 2006
23 janv. 2006 à 17:56
bonjour

admettons qu'on veuille écrire une classe de qui écrive des traces et des logs redirigés vers une sortie standard.
on veut quelque chose du type:
maclasse::MaMethodeQuiPlante()
{

MaTrace.Screen("maclasse::MaMethodeQuiPlante");
InstructionQuiPlante();
MaTrace.out();
}

il serait pratique de ne pas avoir à recopier à chaque fois ::MaMethodeQuiPlante

combinée à la surcharge d'opérateur cette astuce serait bien pratique si on pouvait récupérer le nom de la méthode
cs_poppyto Messages postés 540 Date d'inscription dimanche 29 décembre 2002 Statut Modérateur Dernière intervention 13 mai 2011
19 janv. 2006 à 18:51
> xterminhate

Pour la 3ième fois -> une astuce est une astuce. Si des programmeurs ont créé cette bilbliothèque, c'est qu'il y avait un besoin. Mais je suis entièrement d'accord pour dire que la conception polymorphe est largement plus avantageuse.

Pour conclure, c'est une ASTUCE (et de 4!).
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
19 janv. 2006 à 18:10
Donne moi un exemple d'application qui ne puisse pas avantageusement être remplacé par une conception à base de polymorhpisme d'execution.

Cordialement,
Xter.
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
19 janv. 2006 à 17:38
Oui j'avoue j'ai seulement lu l'explication la deuxième fois que j'ai ouvers cette page :)
cs_poppyto Messages postés 540 Date d'inscription dimanche 29 décembre 2002 Statut Modérateur Dernière intervention 13 mai 2011
19 janv. 2006 à 16:10
>>Luthor

Tu as aussi le droit de lire l'explication, je cite:

"Les puristes vous diront que le langage objet est fait pour se délester des problèmes de typage grâce aux fonctions virtuelles. Certes, mais une astuce reste une astuce et des fois ça peut nous sortir du pétrin donc autant en faire profiter !"

Et par ailleurs je suis du même avis que toi ^^ mais une astuce reste une astuce.
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
19 janv. 2006 à 15:13
Il me semblait que connaitre le type à l'éxécution n'était pas utile et surtout, refletait une mauvaise programmation. non ?
cs_poppyto Messages postés 540 Date d'inscription dimanche 29 décembre 2002 Statut Modérateur Dernière intervention 13 mai 2011
18 janv. 2006 à 11:18
Effectivement avec les objets dynamique VS envoie un warning, il faut rajouter /GR aux options de compilation, j'ai mis ma source à jour ^^.
Merci
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
18 janv. 2006 à 11:00
salut,
ton exemple n'a pas beaucoup d'interet, car l'information de typage est ici connu a la compilation et pas a l'execution (pas pendant le runtime) puisque tes objets sont pas alloués dynamiquement.


Pour faire quelque chose d'un peu plus malin:

class A
{
public:
virtual ~A(){}; // au moins une fonction virtual necessaire pour que le compilo utilise une table de typage dynamique a l'execution

};

class B : public A
{
};


A* ptr1 = new A;
A* ptr2 = new B; // licite car B derive de A


cout << "ptr1 est de type : " << typeid(*ptr1).name() << endl;
cout << "ptr2 est de type : " << typeid(*ptr2).name() << endl;

on voit que pour bien obtenir ce qu'il faut ( ptr1 de class A, ptr2 de class B), il faut avoir activé enable RunTime Type Info dans vs7.

et voila ... update ta source avec cette remarque

a+