类的大小与对象模型
有两个概念可以解释C++对象模型:
1.语言中直接支持面向对象程序设计的部分。
2.对于各种支持的底层实现机制。
语言中直接支持面向对象程序设计的部分,如构造函数、析构函数、虚函数、继承(单继承、多继承、虚继承)、多态等等,这也是组里其他同学之前分享过的内容。第一部分这里我简单过一下,重点在底层实现机制。
在c语言中,“数据”和“处理数据的操作(函数)”是分开来声明的,也就是说,语言本身并没有支持“数据和函数”之间的关联性。在c++中,通过抽象数据类型(abstract data type,ADT),在类中定义数据和函数,来实现数据和函数直接的绑定。
概括来说,在C++类中有两种成员数据:static、nonstatic;三种成员函数:static、nonstatic、virtual。
C++对象模型
1.每一个class产生一堆指向虚函数的指针,放在表格之中。这个表格称之为虚函数表(virtual table,vtbl)。
2.每一个对象被添加了一个指针,指向相关的虚函数表vtbl。通常这个指针被称为vptr。vptr的设定(setting)和重置(resetting)都由每一个class的构造函数,析构函数和拷贝赋值运算符自动完成。
C++中一些重要的语法糖
静态常量整数成员(double就不行)在class内部直接初始化
静态成员只能在类外初始化,且初始化时不加static
基类够构造函数中调用virtual函数实际调用的是基类中的virtual函数(这点和Java不同)
const成员函数:不修改类成员数据