假设我有类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中。有什么变通方法吗?
发布于 2019-03-12 00:31:34
如果这确实是您想要坚持的设计,那么您首先需要有一个虚拟的基础(例如,通过在A
:virtual ~A() = default;
中声明析构函数为虚的,那么您可以简单地这样做:
if(typeid(*_a) == typeid(C)) {
static_cast<C*>(_a)->F();
}
https://stackoverflow.com/questions/55105871
复制相似问题