1.为每一个包含虚函数的类设置一个虚表(VTABLE)

  每当创建一个包含有虚函数的类或从包含虚函数的类派生一个类时,编译器就会为这个类创建一个VTABLE。在VTABLE中,编译器放置了这个类中,或者它的基类中所有已经声明为 virtual的函数的地址。如果在这个派生类中没有对基类中声明为 virtual 的函数进行重新定义,编译器就使用基类的这个虚函数的地址。而且所有VTABLE中虚函数地址的顺序是完全相同的。

2.初始化虚指针(VPTR)
  然后编译器在这个类的各个对象中放置VPTR。VPTR在对象的相同的位置(通常都在对象的开头)。VPTR必须被初始化为指向相应的VTABLE。
 
3.为虚函数调用插入代码 
  当通过基类的指针调用派生类的虚函数时,编译器将在调用处插入相应的代码,以实现通过VPTR找到VTABLE,并根据VTABLE中存储的正确的虚函数地址,访问到正确的函数。

最新文章

  1. listener监听器的相关知识
  2. 让微信扫描直接下载你的APK
  3. 【读书笔记《Android游戏编程之从零开始》】5.Android 游戏开发常用的系统控件(ProgressBar、Seekbar)
  4. 单利 复利计算器程序1.0 2.0 3.0 [ 合 ] 之 WEB
  5. jQuery文本框(input textare)事件绑定方法教程
  6. POJ2506——Tiling
  7. Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结
  8. FMX手机app,如何下载网站图片而不卡界面
  9. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (一)
  10. mongodb中limit与skip方法
  11. Lucene全文检索引擎
  12. Python——汇总
  13. IIS 一键安装及卸载
  14. React列表
  15. shell中mail发邮件的问题
  16. PYTHON-模块 sys os random shutil-练习
  17. Spring @Configuration 和 @Bean 注解
  18. 761A Dasha and Stairs
  19. python中如何打印某月日历
  20. python Linux flask uwsgi nginx 在centos7.3部署

热门文章

  1. MJRefresh(上拉加载下拉刷新)
  2. Python3.5入门学习记录-模块
  3. C#获取QQ旋风的下载记录
  4. J2EE项目开发流程简介
  5. hdu 1042 N!(高精度乘法)
  6. redis学习研究--Redis作者谈Redis应用场景
  7. PHP 获取客户端IP
  8. 编译安装httpd
  9. 使用PHP从web访问mysql数据库
  10. 基于stm32f103zet6的FAT16文件系统学习1(初识FAT16)