【问题标题】:Pointers pointing in Inherited classes指向继承类的指针
【发布时间】:2016-09-02 17:28:30
【问题描述】:

假设我们有一个 BaseClass Character 和三个 SubClasses Good、Bad、Zombie。 还假设我们有两个指针

Character* ptr1,ptr2;

Good、Bad 或 Zombie 类中的那一点。我想创建这样的一部分代码:

if ((ptr1 "shows" Good)&&(ptr2 "shows" Bad)) {...} else if ((ptr1 "shows" Good)&&(ptr2 "shows" Zombie)) {...} else if ...

等等。我怎么能写出这样的声明?我很难理解虚函数、多态性和继承,但也可以随意解释这些。

谢谢你,提前。

【问题讨论】:

  • 您可以使用dynamic_cast 来检查ptr# 是否可以转换为任一派生类。
  • ptr2 未声明为指针)

标签: c++ class pointers subclass derived-class


【解决方案1】:

您可以在 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)) {...}

【讨论】:

    【解决方案2】:

    您可以通过以下方式使用dynamic_cast

    if (dynamic_cast<Good*>(ptr1) && dynamic_cast<Bad*>(ptr2)) {
      ...
    } else if (dynamic_cast<Good*>(ptr1) && dynamic_cast<Zombie*>(ptr2)) {
      ...
    } else if ...
    

    【讨论】:

    • dynamic_cast 也抛出 std::bad_cast
    猜你喜欢
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 2016-04-30
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多