我的dizzyCreature
类继承自creature
类和dizzy
类。它也是creature
类的多态集合的一部分。如果我知道creature
类中的对象是dizzyCreature
,是否有办法从dizzy
类调用函数?
我试过了
creature[2].dizzyCreature::someFunction();
和
dizzyCreature::creature[2].someFunction();
并且都不起作用。有什么想法吗?
答案 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
)
作为旁注,如果我是你,我会尝试做任何你正在尝试做的事情如果可能的话没有多重继承。多重继承可以打开整个罐头除非没有其他选择,否则最好避免使用蠕虫。