啥情况下会使用虚函数表
首先,“有哪本书比较详细的讲解了相关内容”?答:《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;}};
■网友
派生类并没有继承到虚函数表的指针啊。
推荐阅读
- 『先进』长江流域最先进洗舱站在宁投运 油可分离回收,水能循环使用
- 汽车|冬天怎样让车内温度快速升高?座椅加热的最佳使用方式二,外循环的作用总结
- 汽车|迈凯伦Artura不再使用迈凯伦祖传V8引擎了?
- python的html5lib这个库咋使用啊我在网上也没有找到相关文档
- win7中本地连接跟无线网卡同时使用时是怎么样的模式
- 可不可能利用网盘的秒传功能使用伪造的MD5(或其他信息)值进行文件分享
- 为啥很多企业给用户发邮件会使用noreply/no-reply@xx.xx的邮箱
- win10激活的问题
- 全网通的mate8能不能插美国手机卡,在美国使用
- 汽车|首批200辆吉利新能源出租车在长交付使用,充电半小时电量可达80%