1、成员变量和成员函数是分开存储的;
2、空类大小:1;
3、只有非静态成员属性才属于对象身上。
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
//#pragma pack(1) //#pragma pack (n) 作用:C编译器将按照n个字节对齐。最终结果不是16而是12
class Person
{
public:
int m_A; //非静态成员变量,属于对象身上
void func(){}; //函数名是函数指针 成员属性和成员函数是分开存储的
//非静态成员函数不属于对象身上
static int m_B; //静态成员变量是共享的数据,不能具体的说该变量是属于哪一个对象身上
static void func2(){}; //静态成员函数,不属于对象身上
double m_C; //16 字节对齐8 int 4 double 8
};
//结论:只有非静态成员变量,才属于对象身上
void test01()
{
cout << "size of (Person) = " << sizeof(Person) << endl;
//空类的大小为1 每个实例的对象,都有独一无二的地址,char维护这个地址
//Person p[10] 区分p[0] p[1]
}
void test02()
{
//this指针指向被调用的成员函数所属的对象
Person p1;
p1.func(); //编译器会偷偷加上一个this指针 Person * this
Person p2;
p2.func();
}
int main()
{
test01();
system("pause");
return EXIT_SUCCESS;
}