第一章 关于对象

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

  i. virtual function机制:支持一个有效率的“执行期绑定”;

  ii. virtual base class:用以实现“多次出现在继承体系中的base class,有一个单一而被共享的实例”。


2. C++对象模式

  i. 简单对象模型

    一个slot对应一个members,members本身并不存放在object之中,只有“指向member的指针”才放在object内。


  ii. 表格驱动对象模型

    一个data member table和一个member function table


  iii. Nonstatic data members被配置于一个class object之内,static data members则被存放在个别的class object之外。Static 和 nonstatic function members也被放在个别的class object之外。对于虚函数:

    a. 每一个class产生一堆指向virtual functions的指针,放在表格之中,这个表格被称为virtual table(vtbl)。

    b. 每一个class object被安插一个指针,指向相关的virtual table,这个指针被称为vptr。


3. C++中凡处于同一个access section的数据,必定保证以其声明顺序出现在内存布局当中。但当被放置在多个access sections中的各笔数据,排列顺序就不一定了。base classes和derived class的data members的布局也未有谁先谁后的强制规定。


4. 只有通过pointer和reference的间接处理,才支持OO程序设计所需的多态性质。


5. 在C++中,多态只存在于一个个的public class体系中,Nonpublic的派生类行为以及类型为void*的指针可以说是多态的,但它们并没有被语言明确地支持,也就是说它们必须由程序员通过显式的转换操作来管理。


6. C++支持多态的方式

  i. 经由一组隐式的转化操作。例如把一个derived class指针转化成一个指向其public base type的指针:

    shape *ps = new circle()

  ii. 经由virtual function机制:

    ps->rotate();

  iii. 经由dynamic_cast和typeid运算符

    if(circle *pc = dynamic_cast<circle*>(ps) )...


7. class object的大小组成有:

  i. 其nonstatic data members的总和大小;

  ii. 加上任何由于内存对齐的需求而填补上去的空间;

  iii. 加上为了支持virtual而由内部产生的任何额外负担。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值