C++ 多态性分析
2024-09-19 21:24:19
编译 - 时间多态性--函数重载
编译后的中间代码(例如GCC产生.o文件。此时还不是汇编语言)函数名字有变化,看以下两个样例。
void cc_show(const char*str) -> _Z7cc_showPKc
void cc_show(int x) -> _Z7cc_showi
大家能够看到,函数名事实上不同,与返回值、函数名、參数有关。
函数重载的规则就是參数的个数或种类必须不同,所以就不会有混乱了。
执行时多态--virtual动态绑定
编译器在编译的时候,会为含有虚函数的类和以/含有虚函数的类/为基类/的子类创建一个虚函数表(即virtual table)。该表是一个一维数组,存放每一个虚函数的地址。
那么怎样定位虚表呢?编译器另外还为每一个类的对象提供了一个虚表指针(即vptr)。这个指针指向了对象所属类的虚表。在程序执行时。依据对象的类型去初始化vptr,从而让vptr正确的点他们的类的虚表。因此,虚拟函数调用时,就行了,找到正确的功能。
虚函数表是一个类,代替一个对象的。对象只需要保持一个指向虚拟函数表它在类中的指针可以是。如果一个类是多重继承,和其他家长也有虚函数。那么这个类需要维护多个虚函数表。
最新文章
- spring mvc controller间跳转 重定向 传参
- Finite State Machine 是什么?
- 将.dat文件导入数据库
- [HTML/JS] JQuery 页面滚动回到顶部
- switch多分支语句
- iOS 视图控制器转场详解
- class的使用
- oc 中四种实例变量的范围类型@private@protected@public@package
- 微软Hololens学院教程- Holograms 101: Introduction with Device【微软教程已经更新,本文是老版本】
- 转自 Because of you 的总结
- dos 命令
- Android两种 旋转Bitmap方法
- iOS开发面试题整理 (三)
- JMeter请求执行次数设置
- vim搭建笔记
- Metaclasses
- C++中template的简单用法
- Django模型类之models字段类型和参数以及元数据meta
- Time的各种变量unity3d
- MT29F8G08ABACA nandflash 参数记录
热门文章
- The parent project must have a packaging type of POM
- kali之ARP欺骗获取图片流
- Ubuntu 14.04LTS Gnome GUI初体验及163更新源配制
- JavaScript编程:文档对象模型DOM
- python 下载整个站点
- iot表和heap表排序规则不同
- 【Demo 0001】Android 程序结构
- MySQL备份方案-->;(利用mysqldump以及binlog二进制日志)
- 重复数据删除(De-duplication)技术研究(SourceForge上发布dedup util)
- Android菜鸟的成长笔记(2)——第一个Android应用