
9-3:C++多态之多态的实现原理之虚函数表,虚函数表指针静态绑定和动态绑定
发布日期:2021-05-14 14:14:37
浏览次数:19
分类:精选文章
本文共 726 字,大约阅读时间需要 2 分钟。
虚函数表和多态是C++中实现继承和多态性的重要机制。以下是对这些概念的详细分析和理解:
虚函数表:
- 结构:每个拥有虚函数的类都会有一个虚函数表指针(_vfptr),该指针指向一个数组,称为虚函数表。数组中的每个元素是一个函数指针,指向具体的虚函数。
- 存储方式:这个虚函数表通常通过在类的定义中使用
virtual
关键字来添加,每个类都会有一个虚函数表,每个对象都有一个指针指向该虚函数表。 - 对象分布:每个对象的存储空间包括成员变量和一些额外的空间来存储虚函数表指针和虚函数表,导致对应的对象大小大于简单地相加成员变量的大小。
多态原理:
- 多态分为静态多态和动态多态。
- 静态多态(函数重载):在编译时就确定了函数的行为。例如,同一个函数名可以有不同参数类型,编译器根据传入的参数类型选择正确的函数实例。
- 动态多态:在程序运行时根据对象的具体类型来决定函数的执行。通常通过使用基类指针或引用来实现,允许同一函数接口适应不同子类的需求。
继承关系举例:
- 在继承关系中,子类重写了父类的虚函数fun1,而未重写fun2。虚函数表的变化仅影响fun1的指针,fun2仍指向父类的函数。
- 汇编代码显示,当调用基类指针的函数时,会根据基类指针所指对象的类型来执行相应的函数。
多态实现原理:
- 通过父类指针调用函数时,编译器在执行过程中将父指针转换为具体子类指针,从而实现动态调用。
- 这种机制允许程序在运行时根据实际情况选择正确的函数执行,赋予了代码的灵活性。
静态多态与动态多态比较:
- 静态多态:编译时确定行为,函数重载例子。
- 动态多态:运行时确定行为,通过指针或引用实现。
通过理解虚函数表和多态,可以更好地掌握C++对象模型和继承机制,实现更复杂且灵活的应用程序。
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月06日 10时08分03秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Python IO编程
2019-03-06
CSS入门总结
2019-03-06
使用 TortoiseGit 时,报 Access denied 错误
2019-03-06
基于 HTML5 WebGL 的污水处理厂泵站自控系统
2019-03-06
[系列] Go gRPC 调试工具
2019-03-06
django-表单之模型表单渲染(六)
2019-03-06
c++之程序流程控制
2019-03-06
spring-boot-2.0.3之redis缓存实现,不是你想的那样哦!
2019-03-06
httprunner学习23-加解密
2019-03-06
有道云笔记 同步到我的博客园
2019-03-06
李笑来必读书籍整理
2019-03-06
http头部 Expect
2019-03-06
Hadoop(十六)之使用Combiner优化MapReduce
2019-03-06
《机器学习Python实现_10_06_集成学习_boosting_gbdt分类实现》
2019-03-06
CoreCLR源码探索(八) JIT的工作原理(详解篇)
2019-03-06
IOS开发Swift笔记16-错误处理
2019-03-07
flume使用中的一些常见错误解决办法 (地址已经使用)
2019-03-07
andriod 开发错误记录
2019-03-07
C语言编译错误列表
2019-03-07