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
24
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