成员变量和函数的存储
c++实现了“封装”,那么数据(成员属性)和操作(成员函数)是什么样的呢?
“数据”和“处理数据的操作(函数)”是分开存储的。
c++中的非静态数据成员直接内含在类对象中,就像c struct一样。
成员函数(member function)虽然内含在class声明之内,却不出现在对象中。
每一个非内联成员函数(non-inline member function)只会诞生一份函数实例.
#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; class Person { public: int m_A; //非静态成员变量,属于对象身上 打印结果为int的size 4 void func() {}; //非静态成员方法 不属于对象身上 结果仍然是 4 static int m_B; //静态成员变量 不属于对象身上 结果 4 static void func2() {}; //静态成员方法 不属于对象身上 结果 4 double m_C; //字节对齐 int占4字节 double占8字节 所以以double为准 结果是16 }; void test701() { //空类的大小为1 每个实例的对象 都是独一无二的地址, char维护这个地址 cout << "sizeof (Person) =" << sizeof(Person) << endl; //当类中什么都没有时 结果 1 } int main() { system("Pause"); return 0; }
结论:非静态成员变量,才属于对象身上