027c++對象模型

/*
	1)C++類對象中的成員變量和成員函數是分開存儲的
	成員變量:
	普通成員變量:存儲於對象中,與struct變量有相同的內存佈局和字節對齊方式
	靜態成員變量:存儲於全局數據區中
	成員函數:存儲於代碼段中。

	1、C++類對象中的成員變量和成員函數是分開存儲的。C語言中的內存四區模型仍然有效!
	2、C++中類的普通成員函數都隱式包含一個指向當前對象的this指針。
	3、靜態成員函數、靜態成員變量屬於類
	
	靜態成員函數與普通成員函數的區別:
		靜態成員函數不包含指向具體對象的指針
		普通成員函數包含一個指向具體對象的指針

	*/
#if 0
class C1
{
public:
	int i;  //4
	int j; //4
	int k;  //4
protected:
private:
}; //12ok

class C2
{
public:
	int i;
	int j;
	int k;

	static int m; //4 存在於靜態存儲區
public:
	int getK() const { return k; } //4
	void setK(int val) { k = val; }  //4 成員函數存在於代碼區

protected:
private:
}; //竟然是12ok

struct S1
{
	int i;
	int j;
	int k;
}; //12ok

struct S2
{
	int i;
	int j;
	int k;
	static int m;//存在於靜態存儲區
}; //12ok

void test()
{
	printf("c1:%d \n", sizeof(C1));//12
	printf("c2:%d \n", sizeof(C2));//12
	printf("s1:%d \n", sizeof(S1));//12
	printf("s2:%d \n", sizeof(S2));//12
}
#endif

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章