成员函数的储存方式
每个对象所占用的存储空间只是该对象的数据部分(虚函数指针和虚基类指针也属于数据部分)所占用的存储空间,而不包括函数代码所占用的存储空间。

为了区分是哪个对象在调用公共函数,在 c++ 中专门设立了一个this指针,用来指向不同的对象。
this 指针
class Car {public:int m_price;void SetPrice(int p) {m_price = p;}};int main() {Car car;car.SetPrice(20000);return 0;}
上面是 C++ 代码,翻译成如下的 C 代码
struct Car {int price;};void SetPrice(struct Car* this, int p) {this->price = p;}int main() {struct Car car;SetPrice(&car, 20000); // 给car结构体的price变量赋值return 0;}
非静态成员函数中可以直接使用 this 来代表指向该函数作用的对象的指针。静态成员函数是不能使用 this 指针,因为静态成员函数相当于是共享的变量,不属于某个对象的变量。
类大小的计算
首先,类大小的计算遵循结构体的对齐原则 ,类的大小与普通数据成员有关,与成员函数和静态成员无关。即普通成员函数,静态成员函数,静态数据成员,静态常量数据成员均对类的大小无影响。
空类的大小是一个特殊情况,空类的大小为1个字节。静态数据成员之所以不计算在类的对象大小内,是因为类的静态数据成员被该类所有的对象所共享,并不属于具体哪个对象,静态数据成员定义在内存的全局区。
// TODO 虚函数,虚继承,多继承
