2012-02-29 113 views
0

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

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

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

既不作品。有任何想法吗?

回答

3

如果我正确理解你有什么是这样的:list<Creature*>。该列表包含一些dizzyCreature实例。在这些情况下,你想调用dizzy类的方法。如果这是目标,那么你可以使用dynamic_cast来实现这一目标。比方说你有Create* pCreature那么你可以做:

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

谢谢,我很难找到好的文档 – Aaron 2012-02-29 05:16:06

0

您需要首先检查类是正确的类型,然后使用dynamic_cast投它,已经建议。这个解决方案非常优雅,因为动态类型转换本身会执行类型检查 - 即如果您尝试进行无效转换,它将返回NULL。 (有没有必要使用typeid

作为一个方面说明,如果我是你,我会尽力做你想做的任何事情如果可能的话没有多重继承。多继承可以打开一整罐蠕虫,除非没有其他选择,否则最好避免。