博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++多态之——vptr指针
阅读量:4318 次
发布时间:2019-06-06

本文共 522 字,大约阅读时间需要 1 分钟。

之前做过一个测试,在一个类中定义一个virtual修饰的函数时,sizeof这个类,发现类的大小多了恰好一个指针的字节大小,当初不明白,只是记住有这么一个特性。后来,发现它就是c++编译器给我们添加的vptr指针。

当类中声明虚函数时,编译器会在类中生成一个虚函数表;

虚函数表是一个存储成员函数指针的数据结构;

虚函数表是由编译器自动生成与维护的;

virtual成员函数会被编译器放入虚函数表中;

存在虚函数时,每个对象都有一个指向虚函数的指针(vptr指针)

在实现多态的过程中,父类和派生类都有vptr指针。

 

对象中的vptr指针什么时候被初始化:

对象在创建时,由编译器对vptr指针进行初始化;

只有当对象的构造完全结束后vptr的指向才最终决定下来;

父类对象的vptr指向父类的虚函数表,子类对象的vptr指向子类的虚函数表。

定义子类对象时,vptr先指向父类的虚函数表,在父类构造完成之后,子类的vptr才指向自己的虚函数表。(这也就是在父类或者子类的构造函数中调用虚成员函数不会实现多态的原因,这是一道面试题)

 

转载于:https://www.cnblogs.com/yangguang-it/p/6547314.html

你可能感兴趣的文章
开源管理系统OSSIM设置 语言为中文简体
查看>>
解决winform中mdi子窗体加载时显示最大化最小化按钮的方法
查看>>
Matlab 与 c++对txt 文档的读写格式
查看>>
ATITIT.翻译模块的设计与实现 api attilax 总结
查看>>
Posix消息队列实现机制
查看>>
win8/8.1 免密码登录设置
查看>>
Flask实战第53天:cms编辑轮播图功能完成
查看>>
Android相关的ADB命令
查看>>
c语言typedef关键字的理解
查看>>
vue click事件获取当前元素属性
查看>>
Netty与网络编程
查看>>
mybatis查询语句的背后之参数解析
查看>>
Hadoop工程师面试题(1)--MapReduce实现单表汇总统计
查看>>
如何使用Windows Library文件进行持久化
查看>>
查看和调试Qt源码(动态编译的QT也可进入源码)good
查看>>
关于DCMTK3.6.1源代码编译的总结
查看>>
我为什么离开神州泰岳
查看>>
高级环境编程要看的
查看>>
【java项目实战】一步步教你使用MyEclipse搭建java Web项目开发环境(一)
查看>>
浙江大学PAT上机题解析之1009. Product of Polynomials (25)
查看>>