免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 13560 | 回复: 14
打印 上一主题 下一主题

[函数] 多态类中的虚函数表是Compile-Time,还是Run-Time时建立的? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-24 10:51 |只看该作者 |倒序浏览
RT

论坛徽章:
0
2 [报告]
发表于 2005-11-24 10:55 |只看该作者
不懂C++,猜测应该是runtime的,依稀记得ELF规范中有这方面的支持

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
3 [报告]
发表于 2005-11-24 11:23 |只看该作者
Compile-Time

论坛徽章:
0
4 [报告]
发表于 2005-11-24 11:35 |只看该作者
原帖由 THEBEST 于 2005-11-24 11:23 发表
Compile-Time

偶以后不敢说C++的话了

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
5 [报告]
发表于 2005-11-24 11:37 |只看该作者
[quote] <<Inside the C++ Object Model>>
How might the table containing the virtual function addresses be constructed? In C++, the set of virtual functions capable of being invoked through an object of its class is known at compile time. Moreover, this set is invariant. It cannot be added to nor can a virtual instance be replaced at runtime. The table, therefore, serves only as a passive repository. Since neither its size nor its contents change during program execution, its construction and access can be completely handled by the compiler. No runtime intervention is necessary.

Having the address available at runtime, however, is only half the solution. The other half is finding the address.
[/quote]

论坛徽章:
0
6 [报告]
发表于 2005-11-24 13:29 |只看该作者
虚拟函数表是在编译期就建立了,各个虚拟函数这时被组织成了一个虚拟函数的入口地址的数组.

而对象的隐藏成员--虚拟函数表指针是在运行期--也就是构造函数被调用时进行初始化的,这是实现多态的关键.

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
7 [报告]
发表于 2005-11-24 13:31 |只看该作者
compile_time
其实你可以自己写一个程序,然后看看汇编码就知道了

论坛徽章:
0
8 [报告]
发表于 2010-09-05 14:05 |只看该作者
这个问题想必很多人想知道答案,其实就是编译器已经构造好了,每个虚函数所在类都要相应构造一个这样的虚表,运行时,由构造函数把表的入口地址(起始地址)填入该对象的起始位置。就指向那个表了。派生类对象构造时,先调用基类构造函数填入基类的表首地址,然后是派生类自己的构造函数把自己的表首地址填入对象首地址。

论坛徽章:
0
9 [报告]
发表于 2010-09-05 14:50 |只看该作者
Run-Time的是啥?模板肯定不是,我忘了。

论坛徽章:
1
射手座
日期:2013-08-21 13:11:46
10 [报告]
发表于 2010-09-05 14:54 |只看该作者
C++是静态语言
那些虚表之类的都是编译时期的.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP