множественное наследование и полиморфизм - PullRequest
0 голосов
/ 29 февраля 2012
Класс

my dizzyCreature наследуется как от класса creature, так и от класса dizzy.Это также часть полиморфной коллекции creature классов.Если я знаю, что мой объект в классе creature является dizzyCreature, есть ли способ вызвать функцию из класса dizzy?Я пробовал

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

и

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

, и ни одна из них не работает.Есть идеи?

Ответы [ 2 ]

3 голосов
/ 29 февраля 2012

Если я правильно понимаю, что у вас есть что-то вроде этого: list<Creature*>. Этот список содержит несколько dizzyCreature экземпляров. В этих случаях вы хотите вызывать методы класса dizzy. Если это цель, то вы можете использовать dynamic_cast для достижения этой цели. Допустим, у вас есть Create* pCreature, тогда вы можете сделать:

dizzyCreature* pDizzyCreature = dynamic_cast<dizzyCreature*>(pCreature);
if(pDizzyCreature )
{
  pDizzyCreature->someDizzyClassMethod();
}
0 голосов
/ 29 февраля 2012

Вам нужно сначала проверить, имеет ли класс правильный тип, а затем привести его, используя dynamic_cast, как уже было предложено.Это решение элегантно, так как динамическое приведение само выполняет проверку типов - то есть оно вернет NULL, если вы попытаетесь выполнить неверное приведение.(Нет необходимости использовать typeid)

В качестве примечания, на вашем месте, я бы попытался сделать все, что вы пытаетесь сделать, без множественного наследования, если это возможно. Множественное наследование может открыть целую банку с червями, и его лучше избегать, если нет другой альтернативы.

...