Inside The C++ Object Model(一)关于对象

来源:互联网 发布:电脑k歌软件 编辑:程序博客网 时间:2024/06/06 03:34

一 C++对象模式:

(1)数据成员:

*Non-static data members:对象内部。

*Static data members:对象外部。

(2)成员函数:

*Static和Non-static function members:对象之外。

*Virtual function:指向虚函数表(virtual table)的指针vptr放在对象内部。

(3)虚函数:

*每个class产生一堆指向virtual functions的指针,放在虚函数表(virtual)中。

*每个class对象包含一个执行virtual table的指针vptr。

(4)继承模型:

*数据成员:base class subobject的data members被直接置于derived class object中。

*虚继承:

~扩充已存在的virtual table,以便维护每一个virtual base class的位置(gcc).

~导入一个virtual base class table.(vc6.0)


二 关键字带来的差异。


三 对象的差异:

(1)C++支持三种程序设计典范(programming paradigms):

*程序模型:像C一样。

*抽象数据类型模型:如string class。

*面向对象模型。

*注意:纯粹以一种paradigm写程序,有助于整体行为的良好稳固,混合不同paradigms可能带来不好结果。


(2)对象的大小:

*nonstatic data members的总和大小。

*加上由于任何alignment的需求而填补上去的空间(可能存在于members之间,也可能存在于集合体边界)。

*为了支持virtual而由内部产生的任何额外负担。


(3)指针类型:

*不管指针指向什么类型,指针本身所需的内存大小是固定的。

*"指向不同类型指针的差异":既不在指针表示方法不同,也不在其内容(代表一个地址)不同,而在其所寻址出来的对象不同。

*"指针类型":会教导编译器如何解释某个特定地址的内存内容以及大小。

*void*指针只能含有一个地址,不能通过它操作对象的原因就是上述。

*"转型":并不改变一个指针所含的真正地址,只影响“被指出之内存和其内容”的解释方式。


(4)多态: