C++对象模型和虚函数表分析以及重载、重写、隐藏的区别


C++在布局以及存取时间上主要的额外负担是由virtual引起的。包括:

  •  Virtual function 机制 。用以支持一个有效率的“执行期绑定”(runtime binding)。 
  •  Virtual base class。用以实现“多次出现在继承体系中的base class,有一个单一而共享的实体”。 
此外,还有一些多重继承下的额外负担。发生在“一个derived class和其第二或后继之base class的转换”之间。


C++对象模式:
在C++中,有两种class data members : static 和 nonstatic
                  有三种class member functions: static 、nonstatic 和 virtual


C++模型的演变的过程如下:


简单对象模型(Simple Object Model)



该模型是最简单的模型,只是为了降低设计复杂度,不具备空间和执行器的效率。在这个模型中,每个object是一系列的slots(槽),它的function member和data member依次对应在slot中。

不过,members本身不在object中,在slot中的是它们的pointer,这样可以避免members有不同的类型,因此需要不同的存储空间所导致的问题。这个模型object的大小很容易计算,指针大小,乘以class中声明的members数目便是。

表格驱动对象模型(Member Table Object Model)


该模型将所有的与members相关的信息抽出来,放在一个 data member table 和一个 member function table 之中,class object 本身则含有指向这两个表格的指针。Member function table 是一系列的 slots,每一个 slot 指出一个 member function;Data member table 则直接含有 data 本身。

所以这里相当于 class 指向了一个 Funciton Member Table,Function Member Table 中的每个 slot 又指向了函数地址,多了一层访问的间接性。


C++对象模型(The C++ Object Model)

此模型中,Nostatic data members 被配置于每一个 class object 之内,static data members 也被放在所有的 class object 之外, Virtual function 则以两个步骤支持之。

  1. 每一个 class
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值