我的问题是参考这个问题,它解释了虚拟函数如何在对象切片的情况下工作,最终调用基类虚函数和维基百科文章解释下面代码的派生类的虚拟表布局
class A{
public:
virtual void func(){ cout<<"\n In A:func";}
};
class B:public A{
public:
virtual void func(){ cout<<"\n In B:func";}
};
main(){
A *ptr1 = new B();
A oA = *ptr1;
oA.func();
}
DerviedClassObjectB:
+0: pointer to virtual method table of B
virtual method table of B:
+0: B::func
Run Code Online (Sandbox Code Playgroud)
上面的程序输出"在A :: func".
但是如果没有用于B类的虚拟表知道基类A :: func,最终会调用A :: func