C++面向对象模型初探
成员变量和成员函数分开处理
C++实现了“封装”,那么数据(成员属性)和操作(成员函数)是什么样呢?
“数据”和“处理数据的操作(函数)”是分开存储的。
1. C++中的非静态数据成员直接内涵在类对象中,就像 C struct一样。
2. 成员函数(member function)虽然内涵在class声明之内,却不出现在对象中。
3. 每一个非内联成员函数(non-inline member function)只会诞生一份函数实例。
空类的大小为 1 :
每一个实例的对象都有 独一无二的 地址,内部有一个 char 维护这个地址。
class Person7 {
public:
int m_A;//非静态成员变量,属于对象身上
void func() {};//非静态成员函数,不属于对象身上
static int m_B;//静态成员变量,不属于对象身上
static void func2() {};//静态成员函数,不属于对象身上
double m_C;//非静态成员变量 字节对齐 16字节
};
void test0007() {
cout << "test0007()" << endl;
cout << "sizeof(Person7)=" << sizeof(Person7) << endl;//1
}
#pragma pack(1) 加上 12 不加 16
结论:
非静态成员变量,才属于对象身上。