多重继承和多态

时间:2012-02-29 04:56:09

标签: c++ polymorphism multiple-inheritance

我的dizzyCreature类继承自creature类和dizzy类。它也是creature类的多态集合的一部分。如果我知道creature类中的对象是dizzyCreature,是否有办法从dizzy类调用函数? 我试过了

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

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

并且都不起作用。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

如果我理解你所拥有的是这样的话:list<Creature*>。此列表包含一些dizzyCreature个实例。在那些实例上,您想要调用dizzy类的方法。如果这是目标,那么您可以使用dynamic_cast来实现此目的。假设您有Create* pCreature,那么您可以这样做:

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

答案 1 :(得分:0)

您需要首先检查类是否具有正确的类型,然后使用dynamic_cast进行强制转换,如同已建议的那样。这个解决方案很优雅,因为动态转换本身会进行类型检查 - 即如果你尝试进行无效的转换,它将返回NULL。 (无需使用typeid

作为旁注,如果我是你,我会尝试做任何你正在尝试做的事情如果可能的话没有多重继承。多重继承可以打开整个罐头除非没有其他选择,否则最好避免使用蠕虫。