多态性实现

Polymorphism Implementation

本文关键字:实现 多态性      更新时间:2023-10-16

假设我有类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中声明析构函数虚拟:virtual ~A() = default;,那么你可以简单地做:

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