#include <iostream> using namespace std; class A{ public: virtual void func(){ cout << "A..." << endl; } }; class B:public A{ public: virtual void func(){ cout << "B..." << endl; } virtual void f(){ cout << ".................." << endl; } }; int main(){ //如果是非虚继承,则每个含有virtual的类只要包含一个vtable即可 cout << sizeof(A) << endl; cout << sizeof(B) << endl; A *pa=new A; B *pb=(B*)pa; pb->func(); //正确,但是执行的A的,应为B和A共享这个func的vtable指针 pb->f(); //运行错误,因为这个f的vtable是B保持的,但是B没有创建对象所以无法动态生成这个vtable的地址 return 0; }