brunkass
Messages postés5Date d'inscriptionvendredi 30 août 2002StatutMembreDernière intervention27 décembre 2002
-
23 déc. 2002 à 01:34
cs_vieuxLion
Messages postés455Date d'inscriptionsamedi 26 octobre 2002StatutMembreDerniè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).....
cs_vieuxLion
Messages postés455Date d'inscriptionsamedi 26 octobre 2002StatutMembreDernière intervention 6 avril 20048 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;
brunkass
Messages postés5Date d'inscriptionvendredi 30 août 2002StatutMembreDernière intervention27 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
Toumhor
Messages postés3Date d'inscriptionmercredi 16 octobre 2002StatutMembreDernière intervention19 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;}
brunkass
Messages postés5Date d'inscriptionvendredi 30 août 2002StatutMembreDernière intervention27 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;}
>
>
>
Vous n’avez pas trouvé la réponse que vous recherchez ?
brunkass
Messages postés5Date d'inscriptionvendredi 30 août 2002StatutMembreDernière intervention27 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
-------------------------------
cs_vieuxLion
Messages postés455Date d'inscriptionsamedi 26 octobre 2002StatutMembreDernière intervention 6 avril 20048 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