假设我们有一个BaseClass角色和三个SubClasses Good,Bad,Zombie。 还假设我们有两个指针
Character* ptr1,ptr2;
Good Good,Bad或Zombie中的那一点。我想创建这样的代码的一部分:
if ((ptr1 "shows" Good)&&(ptr2 "shows" Bad)) {...}
else if ((ptr1 "shows" Good)&&(ptr2 "shows" Zombie)) {...}
else if ...
等等。我怎么写这样的陈述?我很难理解虚函数,多态和继承,但也可以用这些来解释。
提前谢谢你。
答案 0 :(得分:2)
您可以在Character中声明一个虚拟公共方法,该方法返回表示字符类型的枚举类,例如
virtual CharacterType GetCharacterType();
....
if((ptr1->GetCharacterType() == CharacterType::Good) && ptr2->GetCharacterType() == CharacterType::Bad)) {...}
或确认角色类型的虚拟方法。
virtual bool Is(CharacterType characterType);
....
if((ptr1->Is(CharacterType::Good) && ptr2->Is(CharacterType::Bad)) {...}
答案 1 :(得分:0)
您可以通过以下方式使用dynamic_cast
:
if (dynamic_cast<Good*>(ptr1) && dynamic_cast<Bad*>(ptr2)) {
...
} else if (dynamic_cast<Good*>(ptr1) && dynamic_cast<Zombie*>(ptr2)) {
...
} else if ...