码迷,mamicode.com
首页 > 编程语言 > 详细

【深度探索c++对象模型】Function语义学之虚函数

时间:2014-07-17 14:21:11      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:io   cti   工作   c   c++   table   

虚函数的一般实现模型:每一个class有一个virtual table,内含该class之中有作用的virtual function的地址,然后每个object有一个vptr,指向virtual table。

识别class是否支持多态,唯一恰当的方法是看它是否有virtual function,只要class拥有virtual function,它就需要额外的执行期信息。

考虑ptr->z(),ptr是基类指针,z是虚函数,为了找到并调用z()的适当实体,我们需要两项信息:

1.ptr所指对象的真实类型(放在virtual table中)

2.z()实体位置

在c++中,虚函数可以在编译时获知,它们地址是固定不变的,放在virtual table中。为了找到virtual table,每个class object被安插一个由编译器内部产生的指针,指向该表格。为了找到函数地址,每一个虚函数被指派一个表格索引值。以上的工作由编译器完成,程序运行时要完成的是在特定的virtual table slot(记录着虚函数地址)中激活虚函数。

一个class只有一个virtual table,每个table内含其对应的class object中所有active virtual function的地址。这些active virtual function包括:

1.这个类所定义的函数实体,它会改写一个可能存在的base class virtual function函数实体

2.继承自base class的函数实体,这是在派生类不改写virtual function时才会出现的情况

【深度探索c++对象模型】Function语义学之虚函数,布布扣,bubuko.com

【深度探索c++对象模型】Function语义学之虚函数

标签:io   cti   工作   c   c++   table   

原文地址:http://www.cnblogs.com/ljygoodgoodstudydaydayup/p/3850862.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!