C++
来源:互联网 发布:linux 下编程工具 编辑:程序博客网 时间:2024/06/03 22:41
C++中多态的实现原理
当类中声明虚函数时,编译器会在类中生成一个虚函数表
虚函数表是一个存储类成员函数指针的数据结构
虚函数表是由编译器自动生成与维护的
virtual成员函数会被编译器放入虚函数表中
存在虚函数时,每个对象中都有一个指向虚函数表的指针VPTR
每一个类都会由编译器自动生成一个虚函数表,而且每个类只有唯一一个表。此类生成的每一个对象里面都隐含着一个指向该表的指针。
调用虚函数时,会通过VPTR指针指向的虚函数表中查询该函数,找到入口地址,并调用。这个过程相对比较耗时,因此执行效率相对比较低,因此,没有必要把所有的函数都设计为虚函数。
对象在创建的时候由编译器对VPTR指针进行初始化
只有当对象的构造完全结束后VPTR的指向才最终确定
父类对象的VPTR指向父类虚函数表
子类对象的VPTR指向子类虚函数表
构造函数中调用虚函数无法实现多态。
当类中声明虚函数时,编译器会在类中生成一个虚函数表
虚函数表是一个存储类成员函数指针的数据结构
虚函数表是由编译器自动生成与维护的
virtual成员函数会被编译器放入虚函数表中
存在虚函数时,每个对象中都有一个指向虚函数表的指针VPTR
每一个类都会由编译器自动生成一个虚函数表,而且每个类只有唯一一个表。此类生成的每一个对象里面都隐含着一个指向该表的指针。
调用虚函数时,会通过VPTR指针指向的虚函数表中查询该函数,找到入口地址,并调用。这个过程相对比较耗时,因此执行效率相对比较低,因此,没有必要把所有的函数都设计为虚函数。
对象在创建的时候由编译器对VPTR指针进行初始化
只有当对象的构造完全结束后VPTR的指向才最终确定
父类对象的VPTR指向父类虚函数表
子类对象的VPTR指向子类虚函数表
构造函数中调用虚函数无法实现多态。
阅读全文
0 0
- c
- c
- c
- c
- C
- c
- c
- c
- C+
- c
- C
- c
- c
- c
- C
- C
- c
- C
- 知耻而后勇
- 《MySQL入门很简单》学习笔记(5)之第5章操作数据库(关键词:数据库/创建数据库/删除数据库/存储引擎)
- 视频 秒开,美颜,卡顿
- Linux驱动学习之:PWM驱动
- Django之分页功能
- C++
- 使用WindowManager实现悬浮窗
- Excel中Vlookup公式和IFError公式的使用
- linux驱动中使用定时器的设置
- YP.1.1 What We Will Try to Do and 1.2 How We Will Get There(双语)
- 告诉各位为如何学习linux系统
- 年度总结-感谢遇见
- 两个栈实现一个队列,两个队列实现一个栈-JAVA
- poj 4124:海贼王之伟大航路