C++面向对象高级编程(下)第三周

类的大小与对象模型

有两个概念可以解释C++对象模型:

1.语言中直接支持面向对象程序设计的部分。

2.对于各种支持的底层实现机制。

语言中直接支持面向对象程序设计的部分,如构造函数析构函数虚函数继承(单继承、多继承、虚继承)、多态等等,这也是组里其他同学之前分享过的内容。第一部分这里我简单过一下,重点在底层实现机制。

在c语言中,“数据”和“处理数据的操作(函数)”是分开来声明的,也就是说,语言本身并没有支持“数据和函数”之间的关联性。在c++中,通过抽象数据类型(abstract data type,ADT),在类中定义数据和函数,来实现数据和函数直接的绑定。

概括来说,C++类中有两种成员数据:static、nonstatic;三种成员函数:static、nonstatic、virtual


C++对象模型


这个模型对内存存取空间进行了优化。在此模型中,non static数据成员被放置到对象内部,static数据成员,static and nonstatic函数成员均被放到对象之外。对于虚函数的支持则分两步完成:

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

2.每一个对象被添加了一个指针,指向相关的虚函数表vtbl。通常这个指针被称为vptr。vptr的设定(setting)和重置(resetting)都由每一个class的构造函数析构函数拷贝赋值运算符自动完成。

C++中一些重要的语法糖

静态常量整数成员(double就不行)在class内部直接初始化

静态成员只能在类外初始化,且初始化时不加static

基类够构造函数中调用virtual函数实际调用的是基类中的virtual函数(这点和Java不同)

const成员函数:不修改类成员数据

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容