社区
C++ 语言
帖子详情
构造函数执行在前,还是虚表指针覆盖在前?
ngbbxt
2013-01-23 09:36:13
一个类有虚函数。那么,
类的对象在生成的时候,是先执行构造函数,还是先给虚表指针赋值?
...全文
188
3
打赏
收藏
构造函数执行在前,还是虚表指针覆盖在前?
一个类有虚函数。那么, 类的对象在生成的时候,是先执行构造函数,还是先给虚表指针赋值?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xumaojun
2013-01-23
打赏
举报
回复
问题研究的太深了,学习一下
ngbbxt
2013-01-23
打赏
举报
回复
准确来说,应该是给虚表指针赋值吧,而不是给虚表赋值吧? 虚表是编译生成后,就存在了吧?
引用 1 楼 akirya 的回复:
先把当前类的虚表赋值
珍惜生命远离CPP
2013-01-23
打赏
举报
回复
先把当前类的虚表赋值
最全的C和C++语言笔试面试题汇总
最全的C和C++语言笔试面试题汇总,我大四时候找工作时候他帮上了很多忙,里面的题目经常考到。希望对大家有帮助。
为什么
构造函数
不能声明为虚函数?
自己总结: 1.当创建一个子类对象时,如果将
构造函数
声明为虚函数,因为子类在构造时,会先调用父类的够造函数,但是子类已经
覆盖
了基类的
构造函数
(因为是虚函数),所以也就无法进一步
执行
,导致程序出错。 2.虚函数需要通过虚函数
指针
指向一个虚函数表,当将
构造函数
声明为虚函数,在创建对象时,首先要调用
构造函数
,然后
构造函数
是虚函数,就需要用虚函数
指针
去调用,但是,对象都还没构造,也就没有虚函数
一篇文章理清C++对象创建、构造、析构和虚函数
指针
的关系
对象和变量是在编译时就确定内存大小的,但同时也在编译期间确定该类没有虚函数,则会进行内存优化,不实际分配虚函数
指针
的内存空间。运行时,对象是先创建的,然后再分配内存。系统为对象的非静态成员变量与vptr(虚函数
指针
)分配内存,并且在内存空间中,会先安放vptr(虚函数
指针
),但是此时的虚函数
指针
并未赋值当调用
构造函数
,在
构造函数
执行
过程中,会将vptr指向正确的虚函数表,从而绑定对象和其虚函数。对于没有虚函数的类,vptr可以为null或指向一个共享的空虚函数表。
虚函数表
构造函数
面试的时候被问到,
构造函数
中能不能为虚函数,
构造函数
中能不能调用虚函数的问题,被问蒙了,查了点资料记录下, 为什么
构造函数
不能使虚函数: 一、
构造函数
不能为虚函数的理由: 1,从存储空间角度 虚函数对应一个vtable,这大家都知道,可是这个vtable其实是存储在对象的内存空间的。问题出来了,如果
构造函数
是虚的,就需要通过 vtable来调用,可是对象还没有实
C++虚函数
指针
虚函数表
C++的多态可以分为静态多态和动态多态。函数重载和运算符重载实现的多态属于静态多态,而通过虚函数可以实现动态多态。实现函数的动态联编其本质核心则是
虚表
指针
与虚函数表。 1. 虚函数与纯虚函数区别 1)虚函数在子类里面也可以不重载的;但纯虚必须在子类去实现 2)带纯虚函数的类叫虚基类也叫抽象类,这种基类不能直接生成对象,只能被继承,重写虚函数后才能使用,运行时动态动态绑定! 2.
C++ 语言
65,187
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章