C++ 多态性实现

C++ 多态性实现,c++,polymorphism,C++,Polymorphism,假设我有类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 = Someth

假设我有类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:
virtual~a()=default;
,然后您可以简单地执行以下操作:

   if(typeid(*_a) == typeid(C)) {
    static_cast<C*>(_a)->F();
}
if(typeid(*\u a)=typeid(C)){
静态_cast(_a)->F();
}

如果您有指向“a”的指针,那么您可以使用dynamic_cast来确定它指向的对象是B还是C的实例。您可以使用以下语法:
If(auto pointerToC=dynamic_cast(_a)){/*stuff*/}
。如果您注意到需要在代码中经常这样做,那么您的设计很可能有缺陷。