深夜睡不着觉,很痛苦。
关于对象
第一部分:
1.c++加上封装之后的成本:
a.成员数据:c++ class中的成员数据等同于c中struct中的数据;
b.非内联的成员函数:只会出现一个函数实体,由class中保存,由class实例化后的对象指向class中的函数地址;
c.内联的成员函数:拥有一个或零个函数定义的内联函数会在每个使用者身上产生一个函数实体;
d.virtual function机制:支持一个有效率的”执行期绑定“;(产生额外的负担)
e.virtual base class:用以实现”多次出现在继承体系中的base class,有一个单一被共享的实体“;(产生额外的负担)
f.derived class:基类与派生类之间的转换会产生额外的负担;(产生额外的负担)
第二部分:c++对象模型
1.c++对象模型
a.在c++中有两种class data members:static和nonstatic,三种class member functions:static,nonstatic,virtual。
b.c++对象模型结构:
nonstatic data members被配置在每一个class object之内;
static data members则被存在所有class object之外;
static 和nonstatic function members也被放在所有class object之外;
每一个class产生一堆指向virtual functions的指针,放于virtual table(vtbl)之中;
每个class object有一个指针(vptr)指向相关的vtbl,vptr的设置和重置由每个class的constructor,destructor和copy assignment自动完成,
每个class所关联的type_info object也有vtbl指出,通常放在vtbl的第一个slot处;
c++中支持继承,多重继承,虚拟继承,在虚拟继承的情况下,base class不管呗派生多少次了,都只会存在一份实体;
每一个class object内部都含有一个bptr指向base class table;
object vtbl第一位保存class的type_info object,第二位指向虚函数地址,第三位开始指向其他虚函数;
第三部分:struct and class
1.c++中class 与struct的差异和使用方式和位置
a.随便~
第四部分:object distinction
1.c++支持三种programming paradigms
a:包括程序模型,抽象数据类型模型,面向对象模型;
b.class object大小;
2.指针的类型