【问题标题】:Polymorphism Implementation多态实现
【发布时间】:2019-03-11 16:02:13
【问题描述】:

假设我有 A 类,B 类继承 A,C 类也继承 A。C 类有方法 F,而 B 类没有。

class A {
    //Some stuffs
};

class B : public A {
    //Some stuffs.
};

class C : public A {
    void F ();
};

我的问题是,当我有一个我不完全知道它属于哪个类的对象(它可以是 B 或 C)时,我想使用 A 类的指针检查该对象,如果那个对象属于类C,那么我想调用方法F。我如何实现这些类?

我想要这样的东西。

A *_a = Something;
if (_a is pointing to object of class C){
    _a->F;
}

现在,我正在考虑将方法 F 作为 A 类中的虚拟方法,但我认为这不是一个真正好的方法,因为只有 C 类实际上有它,如果是这样的话我这样做了,对于我想要在 C 类中的每个方法,我也必须将它添加到 A 类中。有什么解决办法吗?

【问题讨论】:

  • 如果你有一个指向'A'的指针,那么你可以使用dynamic_cast来判断它指向的对象是B还是C的实例。你可以使用以下语法:@ 987654323@。如果您发现需要在代码中经常这样做,则很可能您的设计存在缺陷。

标签: c++ polymorphism


【解决方案1】:

如果这确实是你想要坚持的设计,你首先需要有一个虚拟基础(例如通过在A:virtual ~A() = default; 中声明析构函数 virtual,然后你可以简单地这样做:

   if(typeid(*_a) == typeid(C)) {
    static_cast<C*>(_a)->F();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 2012-06-24
    相关资源
    最近更新 更多