1. 普通成員變量的存儲順序按照在類中定義的順序
class A
{
public:
int m_i;
static int m_si;
int m_j;
static int m_sj;
int m_k;
static int m_sk;
};
int main()
{
A a;
a.m_i = 2;
a.m_k = 5;
a.m_j = 3;
return 0;
}
- 對應的內存地址
打印成員變量的偏移地址
class A
{
public:
int m_i;
static int m_si;
int m_j;
static int m_sj;
int m_k;
static int m_sk;
public:
//法2:
void printMemberOffect()
{
printf("%d\n", &A::m_j);
}
};
int main()
{
A a;
a.m_i = 2;
a.m_k = 5;
a.m_j = 3;
//法1:
int A::* p = &A::m_j;
printf("%d\n", p);
//
a.printMemberOffect();
return 0;
}
- 結果
2. 引入繼承關係後,可能會增加類的內存空間(字節對齊)
- 沒引入繼承關係
class A
{
public:
int m_i;
char m_j;
char m_k;
char m_l;
};
int main()
{
cout << sizeof(A) << endl;
return 0;
}
結果:
- 引入繼承關係
class A
{
public:
int m_i1;
char m_j1;
};
class B :public A
{
public:
char m_k2;
};
class C :public B
{
public:
char m_l3;
};
int main()
{
cout << sizeof(A) << endl;
cout << sizeof(B) << endl;
cout << sizeof(C) << endl;
return 0;
}
結果: