上記の例を通じて、我々は派生することができます:
1)C ++クラスオブジェクトのメンバ変数とメンバ関数が別々に格納されています
メンバー変数:
共通のメンバ変数:オブジェクト変数構造体同じメモリレイアウトに格納され、バイト位置合わせされています
静的メンバ変数:領域に格納されたグローバルデータ
メンバ関数:コードセグメントに格納します。
以下のコードは、コメントの点に注意してください。
#include "iostream"
using namespace std;
class C1
{
public:
int i;
int j;
int k;
protected:
private:
};
class C2
{
public:
int i;
int j;
int k;
static int m;
public:
int getK() const { return k; }
void setK(int val) { k = val; }
protected:
private:
};
struct S1
{
int i;
int j;
int k;
};
struct S2
{
int i;
int j;
int k;
static int m;
};
int main(int argc, char* argv[])
{
cout<<"类C1的存储空间:"<<sizeof(C1)<<endl; //输出12,表明只会计算非静态变量的总存储空间,而静态变量存储在全局区,函数存储在代码区,后面两部分sizeof不计算
cout << "类C2的存储空间:" << sizeof(C2) << endl; //输出12,表明只会计算非静态变量的总存储空间,而静态变量存储在全局区,函数存储在代码区,后面两部分sizeof不计算
cout << "结构体S1的存储空间:" << sizeof(S1) << endl; //输出12,表明只会计算非静态变量的总存储空间,而静态变量存储在全局区,函数存储在代码区,后面两部分sizeof不计算
cout << "结构体S2的存储空间:" << sizeof(S2) << endl; //输出12,表明只会计算非静态变量的存储空间,而静态变量存储在全局区,函数存储在代码区,后面两部分sizeof不计算
}