一个空类:
空类继承一个空类:
空类继承一个非空类:
总结:一个空类占的大小是1,一个空类要是继承一个非空类大小应该是非空类的大小,继承一个空类大小还是1.
现在,我们添加成员函数
一个成员函数:
一个static成员函数:
两个成员函数:
两个static成员函数:
三个成员函数:
三个static成员函数:
总结:C++编译系统正是这样做的,因此每个对象所占用的存储空间只是该对象的数据部分所占用的存储空间,而不包括函数代码所占用的存储空间。注意:virtual成员函数除外。
现在,我们添加成员变量:
一个成员变量:
一个static成员变量:
两个成员变量:
两个static成员变量:
三个成员变量:
三个static成员变量:
总结:static成员变量时不占用内存空间的(当然,static成员函数也不占用空间)。非static成员变量占用内存空间,大家可以看到的是,有内存对齐的情况。
内存对齐:
VC++6.0默认对齐为8字节:
当然,我们可以改变它:
现在,我们添加虚函数:
一个虚函数:
两个虚函数:
三个虚函数:
虚函数:每个类有一个vtable,叫做虚表。每个对象有一个vptr,叫做虚指针,指向类的虚表。如果在32位机器上,因为它是一个指针,所以,大小为4.
单继承:
多继承:
总结:单继承的话,子类的虚表覆盖父类的虚表,只有一个虚表。所以,在32位机器上,大小为4.多继承的话,子类继承每个父类的虚表,所以,为12。