Problème avec les fonctions virtuelles

nisaloncaje Messages postés 154 Date d'inscription samedi 7 janvier 2006 Statut Membre Dernière intervention 28 septembre 2008 - 18 févr. 2007 à 23:05
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 - 19 févr. 2007 à 16:38
Salut, j'utilise dans mon programme un vector qui contient plusieurs
types d'objets issus d'une meme classe (class_mere) qui est abstraite.
Pour la déclaration de ce vecteur j'utilise
vector<class_mere*>
objs;

 
Ces objets sont de classe class_a ou class_b ou class_c et on
chacun des variables propres (qui ne sont pas dans les autres classes).

 
Le problème est le suivant : si je fais un appel à une
variables qui appartient à une des classes héritées mais pas à la
classe mère, par l'intermédiaire du tableau, par exemple
objs[0]->var_appartenant_que_a_class_a;
le compilateur me renvoie
que class_mere ne contient pas cette variable. Ainsi je ne sais pas
comment accéder à cette variable qui appartient à un objet du tableau
 
Merci d'avance

 
NC

2 réponses

cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 3
19 févr. 2007 à 01:31
Salut, je n'ensuis pas sûr mais je pense que tu es obligé de faire un cast dynamique pour savoir quel type d'objet tu es en train de traiter.

if(dynamic_cast<class_a>(objs[i]) != 0)
dynamic_cast<class_a>(objs[i])->var_appartenant_que_a_class_a;

Tu peux aussi faire avec typeid()

if(typeid(objs[i]) == typeid(class_a))
dynamic_cast<class_a>(objs[i])->var_appartenant_que_a_class_a;

Mais bon, ce type de code qu'à utiliser que dans des cas très spécifique. Dans la plupart des cas, avec une bonne architecture de classes on peut éviter ce type de code.

Bonne chance.

Bouba.
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
19 févr. 2007 à 16:38
Il me semble qu'un static cast suffit dans ce cas.

(class_a*)(objs[0])->var_class_a;
0
Rejoignez-nous