Pb de cast ou instanceOf ???

brunkass Messages postés 5 Date d'inscription vendredi 30 août 2002 Statut Membre Dernière intervention 27 décembre 2002 - 23 déc. 2002 à 01:34
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 - 30 déc. 2002 à 16:25
Voila mon pb :
g une classe A dont heritent plusieurs autres classes B1,B2,B3...

g créé un vecteur de pointeur vers des objets de type A, seulement derriere c'est soit B1 soit B2 soit B3...

bon en fait je voudrais connaitre le mot clef pour savoir de quel classe est un objet ???
je connaissais instanceOf ms lui il me donne tjs la classe mere (A).....

pls
Merci.

7 réponses

cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
23 déc. 2002 à 09:14
bonjour,
Si le polymorphisme ne te suffit pas,
c'est un bon endroit pour utiliser le RTTI

Voici un exemple :
#include <typeinfo>
#include
using namespace std;
//les classes doivent posséder au moins une méthode virtuelle
class A
{public: A(){}; virtual ~A(){}; };
class B1 : public A
{public: B1(){}; virtual ~B1(){};};
class B2 : public A
{public: B2(){}; virtual ~B2(){};};

void main(int argc, char ** argv)
{
cout << "A* pAsurA = new A();" << endl;
A* pAsurA = new A();
cout << "A* pAsurB1 = new B1();" << endl;
A* pAsurB1 = new B1();
cout << "A* pAsurB2 = new B2();" << endl;
A* pAsurB2 = new B2();
//Attention, en VC++6 : ne donne pas les bons résultats si on ne déréférence pas les pointeurs!
cout << "typeid(pAsurA).name()=" << typeid(pAsurA).name() << endl;
cout << "typeid(pAsurB1).name()=" << typeid(pAsurB1).name() << endl;
cout << "typeid(pAsurB2).name()=" << typeid(pAsurB2).name() << endl;
//OK
cout << "typeid(*pAsurA).name()=" << typeid(*pAsurA).name() << endl;
cout << "typeid(*pAsurB1).name()=" << typeid(*pAsurB1).name() << endl;
cout << "typeid(*pAsurB2).name()=" << typeid(*pAsurB2).name() << endl;

l'operateur instanceof ... c'est en Java
A+
0
brunkass Messages postés 5 Date d'inscription vendredi 30 août 2002 Statut Membre Dernière intervention 27 décembre 2002
23 déc. 2002 à 14:12
merci pour ta reponse.. le pb c que g essaye alors :

- sans dereferencer, en effet ca rend toujours la classe A
- le pb c'est que quand je dereference, il me génère un warning a la compil et une erreur a l'execution !!!!

.... donc je sais pa d'ou ca viens.....
Si kelkun a la réponse a ce ****** de pb....
Merci
Brunkass
0
Toumhor Messages postés 3 Date d'inscription mercredi 16 octobre 2002 Statut Membre Dernière intervention 19 février 2003
26 déc. 2002 à 17:32
pourquoi ne pas ajouter une methode virtuelle a la classe A qui renvoit un type en fonction de l'objet et de deriver cette methode dans les classes derivees:

par ex:
enum kind_of_class
{
kind_none,
kind_b1,
kind_b2
}

dans la classe A:
kind_of_class GetKind() {return kind_none;}

dans la classe B1:
kind_of_class GetKind() {return kind_b1;}

dans la classe B2:
kind_of_class GetKind() {return kind_b2;}
0
brunkass Messages postés 5 Date d'inscription vendredi 30 août 2002 Statut Membre Dernière intervention 27 décembre 2002
27 déc. 2002 à 21:43
-------------------------------
Réponse au message :
-------------------------------

> pourquoi ne pas ajouter une methode virtuelle a la classe A qui renvoit un type en fonction de l'objet et de deriver cette methode dans les classes derivees:
>
> par ex:
> enum kind_of_class
> {
> kind_none,
> kind_b1,
> kind_b2
> }
>
> dans la classe A:
> kind_of_class GetKind() {return kind_none;}
>
> dans la classe B1:
> kind_of_class GetKind() {return kind_b1;}
>
> dans la classe B2:
> kind_of_class GetKind() {return kind_b2;}
>
>
>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
brunkass Messages postés 5 Date d'inscription vendredi 30 août 2002 Statut Membre Dernière intervention 27 décembre 2002
27 déc. 2002 à 21:45
Yep merci... c exactement ce que j'ai fait en fait !
Ms c qd meme bizarre que ce soit possible + directement...
Bye
-------------------------------
0
brunkass Messages postés 5 Date d'inscription vendredi 30 août 2002 Statut Membre Dernière intervention 27 décembre 2002
27 déc. 2002 à 21:45
Yep merci... c exactement ce que j'ai fait en fait !
Ms c qd meme bizarre que ce soit pas possible + directement...
Bye
-------------------------------
0
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
30 déc. 2002 à 16:25
...de retour de vacances
as tu bien positionné le switch /GR du compilateur ?
ou alors sous l'environnement VC++6
Project/Settings/C++/C++Langage/cocher la case EnableRTTI

A plus
0
Rejoignez-nous