深度探索C++ 对象模型 笔记 - 第一章
C++对象模型的演变
简单对象模型
一个object是一系列的slots,每一个slot指向一个members.Members按其声明顺序,各被指定一个slot
表格驱动对象模型
将类的成员和函数抽出来分为两个表,class object中存放这指向两个表的指针
C++对象模型
- 非静态成员存放在class object 中,函数和静态成员存放在class object 之外
- virtual function 由class object中安插的vptr(指向vtbl——虚函数表)支持.每一个class 的构造、拷贝和析构都自动完成对vptr的设置、重置.
struct 和 class 的差异
在C++ 领域中两者在用法上没有太大区别,但是既然已经迁移到了C++ 领域,使用面向对象的方式思考就最好放弃使用struct 转而使用class 在思想层面更有觉悟一点…23333
但是struct 在C++ 中有一个合理用途,当你要传递”一个复杂的class object”的全部或部分到某个C函数去时,struct声明可以将数据封装起来,并保证用于与C兼容的空间布局.然而这项保证只有在组合的情况下才存在.如果是继承的话由于编译器会有些策略改变class object在内存中的布局 ,编译器会决定是否应该有二外的data members 被安插到base struct subobject之中.
三种程序设计范式
- 程序模型 : like C
- 抽象数据类型模型(ADT): 所谓的“抽象”是和一组表达式一起提供的,那时其运算定义任隐而未明
- 面相对象模型: 在此模型中有一些彼此相关的类型,通过一个抽象的base class 被封装起来.
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment