2012-02-29 5 views
0

ma classe dizzyCreature hérite à la fois d'une classe creature et d'une classe dizzy. Il fait également partie d'une collection polymorphe de classes creature. Si je sais que mon objet dans la classe creature est un dizzyCreature, existe-t-il un moyen d'appeler une fonction de la classe dizzy? J'ai essayéhéritage multiple et polymorphisme

creature[2].dizzyCreature::someFunction(); 

et

dizzyCreature::creature[2].someFunction(); 

et ne travaille. Des idées?

Répondre

3

Si je comprends bien ce que vous avez est quelque chose comme ceci: list<Creature*>. Cette liste contient quelques instances dizzyCreature. Sur ces instances, vous souhaitez appeler les méthodes de classe dizzy. Si tel est l'objectif, vous pouvez utiliser dynamic_cast pour y parvenir. Disons que vous avez Create* pCreature alors vous pouvez faire:

dizzyCreature* pDizzyCreature = dynamic_cast<dizzyCreature*>(pCreature); 
if(pDizzyCreature) 
{ 
    pDizzyCreature->someDizzyClassMethod(); 
} 
+0

Merci, j'ai eu du mal à trouver une bonne documentation là-dessus – Aaron

0

Vous devez d'abord vérifier si la classe est du type correct, puis convertion à l'aide dynamic_cast, comme cela a déjà été suggéré. Cette solution est élégante car la distribution dynamique effectue elle-même la vérification de type, c'est-à-dire qu'elle renvoie NULL si vous tentez de créer une distribution non valide. (Il n'est pas nécessaire d'utiliser typeid)

En note secondaire, si j'étais vous, je ferais tout ce que vous essayez de faire sans héritage multiple si possible. L'héritage multiple peut ouvrir toute une boîte de Pandore et il est préférable de l'éviter à moins qu'il n'y ait pas d'autre alternative.