c++对象模型学习心得(几个可行的对象模型)

1、简单对象模型
整个对象模型被分成很多个槽,每个放置一个成员的指针,或者是数据成员,或者是函数成员。
成员的寻址方式是以第个槽的索引值来寻找,也就是说地址是对象的基址加上索引*指针大小。
2、表格对象模型
将数据成员和函数成员划分开来,数据成员集中放在一个表中,函数成员放在另一个表中。
数据成员表存放实际数据,函数成员表中存放函数地址指针。
3、C++对象模型
(1)
将非静态数据成员作为一类放在类对象中。
所有静态数据成员和函数成员分别放在所有类对象之外;数据成员单独存放,函数成员指针统一放在一个表中,
静态数据成员和函数成员不为每个类对象保存一份拷贝,而是为所有的该类对象共用。
(2)
这样,每个类产生很多指向VIRTUALFUNCTIONS的指针,放在表格之内,这个放着很多函数指针的表格被称为VTBL(virtualtable),而这个指针称为vptr,这个指针的设定和重置由类的构造、析构和拷贝赋值运算符自动完成,注意是自动完成,不用为此专门增加代码。非静态数据成员也放在类对象存储空间之外。
类对象空间里存放2样东西,一个是非静态数据成员(不是数据成员指针),一个就是VTBL的地址。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值