第一章读书笔记

1.c++对数据和操作加上封装后的布局成本是否增大?

没有虚函数和虚基类,封装后的class并没有增加成本.成员函数岁在class的声明中,却不出现在对象中,一个类共享一份代码.每一个非inline的函数只有一份实例.每一个inline函数则会在其每一个使用者上产生一个函数实例.

封装后的额外负担主要由virtual性质引起的

a   virtual 机制:用以执行一个有效率的执行期绑定

        b  virtual基类:用以实现多次出现在继承体系中的虚基类只有一个单一而被共享的实例

2.c++对象模型

        在现在的c++对象模型出现之前,还有过简单对象模型和表格驱动模型,可参考p7p8.

nonstatic数据成员存在于每个对象之中,static数据成员属于整个类,存放于具体的对象之外.static成员函数和nonstatic成员函数也存放于对象之外.

而每个对象都支持虚函数.

a  每个类产生出一堆指向虚函数的指针,存放在虚表中,虚表的第一个slot通常存放的是此对象的类型信息

b  每个对象都安插一个虚指针指向虚表

此模型的优点在于它的空间时存取时间的效率,缺点为当nonstatic数据成员改变时,相对的应用代码需要重新编译.

而继承模型则采用的是:基类子对象的数据成员直接存放在继承类中,这样存取效率高,缺点是这些成员改变时用户代码需要重新编译.

包含虚基类的模型在下面文章详解.


未完待续...........





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章