啥情况下会使用虚函数表

首先,“有哪本书比较详细的讲解了相关内容”?答:《Inside the C++ Object Model》,必读。然后关于本程序,C++有静态类型和动态类型的概念。指针a的静态类型(对于编译器来说)是A,动态类型(对于运行时来说)是B。编译器在编译时看到func()调用,就先在指针类型作用域(也就是class A)里面找func,找到了non-virtual func(),所以直接调用,如果找到的是virtual func,那么会生成代码间接调用虚函数表相应偏移的函数入口。你把A::func改成virtual, 可以通过对比生成的汇编代码看到区别。PS. 在C++11之后,请这么写虚函数代码:class A{public: A(){} ~A(){} virtual void func(){std::cout\u0026lt;\u0026lt;"A"\u0026lt;\u0026lt;std::endl;}};class B: public A{public: B(){} ~B(){} virtual void func() override {std::cout\u0026lt;\u0026lt;"B"\u0026lt;\u0026lt;std::endl;}};
■网友
派生类并没有继承到虚函数表的指针啊。


    推荐阅读