编译 - 时间多态性--函数重载

编译后的中间代码(例如GCC产生.o文件。此时还不是汇编语言)函数名字有变化,看以下两个样例。

void cc_show(const char*str)     ->    _Z7cc_showPKc

void cc_show(int x)            ->     _Z7cc_showi

大家能够看到,函数名事实上不同,与返回值、函数名、參数有关。

函数重载的规则就是參数的个数或种类必须不同,所以就不会有混乱了。

执行时多态--virtual动态绑定

编译器在编译的时候,会为含有虚函数的类和以/含有虚函数的类/为基类/的子类创建一个虚函数表(即virtual table)。该表是一个一维数组,存放每一个虚函数的地址。

那么怎样定位虚表呢?编译器另外还为每一个类的对象提供了一个虚表指针(即vptr)。这个指针指向了对象所属类的虚表。在程序执行时。依据对象的类型去初始化vptr,从而让vptr正确的点他们的类的虚表。因此,虚拟函数调用时,就行了,找到正确的功能。

虚函数表是一个类,代替一个对象的。对象只需要保持一个指向虚拟函数表它在类中的指针可以是。如果一个类是多重继承,和其他家长也有虚函数。那么这个类需要维护多个虚函数表。

最新文章

  1. spring mvc controller间跳转 重定向 传参
  2. Finite State Machine 是什么?
  3. 将.dat文件导入数据库
  4. [HTML/JS] JQuery 页面滚动回到顶部
  5. switch多分支语句
  6. iOS 视图控制器转场详解
  7. class的使用
  8. oc 中四种实例变量的范围类型@private@protected@public@package
  9. 微软Hololens学院教程- Holograms 101: Introduction with Device【微软教程已经更新,本文是老版本】
  10. 转自 Because of you 的总结
  11. dos 命令
  12. Android两种 旋转Bitmap方法
  13. iOS开发面试题整理 (三)
  14. JMeter请求执行次数设置
  15. vim搭建笔记
  16. Metaclasses
  17. C++中template的简单用法
  18. Django模型类之models字段类型和参数以及元数据meta
  19. Time的各种变量unity3d
  20. MT29F8G08ABACA nandflash 参数记录

热门文章

  1. The parent project must have a packaging type of POM
  2. kali之ARP欺骗获取图片流
  3. Ubuntu 14.04LTS Gnome GUI初体验及163更新源配制
  4. JavaScript编程:文档对象模型DOM
  5. python 下载整个站点
  6. iot表和heap表排序规则不同
  7. 【Demo 0001】Android 程序结构
  8. MySQL备份方案-->(利用mysqldump以及binlog二进制日志)
  9. 重复数据删除(De-duplication)技术研究(SourceForge上发布dedup util)
  10. Android菜鸟的成长笔记(2)——第一个Android应用