我有以下课程.
class A { public: void fun(); } class B: public A { } class C: public A { } A * ptr = new C;
可以做下面这样的事情吗?如果在基类中引入一些虚函数,我会遇到一些问题吗?
((B *)ptr)->fun();
这可能看起来很愚蠢,但我有一个通过B调用A函数的函数,我不想改变它.
您不能将A*指向C类作为B*,因为C类与B类没有任何关系.您将获得未定义的行为,这可能是调用的错误函数和堆栈损坏.
如果你打算从C级派生出来,那么你可以.但是,你不需要.如果C类没有定义fun(),它将继承A的.你没有声明fun()虚拟,所以如果你甚至实现C :: fun()或B :: fun(),你会得到奇怪的行为.你几乎肯定希望fun()被声明为虚拟.