多态实现

时间:2019-03-11 16:02:14

标签: c++ polymorphism

比方说,我有A类,继承了A的B类,也继承了A的C类。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类中。有什么解决方法吗?

1 个答案:

答案 0 :(得分:1)

如果这确实是您要坚持的设计,则首先需要有一个坚实的基础(例如,通过在Avirtual ~A() = default;中声明析构函数为虚拟的,那么您可以简单地执行以下操作:

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