C 物件模型和this指標詳解

2022-09-21 21:57:14 字數 1965 閱讀 8748

目錄

成員變數和成員函式分開儲存

只有非靜態成員變數才屬於類的物件上

空物件占用位元組為1

class person

;void test01()

int main()

占用記憶體空間為 1 的原因是:如果有其他的空物件,各自分配乙個記憶體空間可以讓兩者之間相互區別,而且 1 位元組也很省記憶體。 所以每個空物件都會有乙個自己的記憶體位址。

class person

;void test02()

int main()

因為 int 型別 ,不把之前的空型別考慮進去。

將person類改為

class person

;int person::m_b = 0;

非靜態成員變數 屬於類的物件上

靜態成員變數,不屬於類物件上

所以不考慮在內

class person

};int person::m_b = 0;

所以成員變數和成員函式是分開儲存的,非靜態成員函式不屬於類物件上

static voidfunc()

{}靜態成員函式也不會增加 不屬於類物件上

用於區分類中多個對www.cppcns.com象呼叫函式時,分別都是哪個函式在呼叫自己。

this 指標指向被呼叫成員函式所屬的物件

特點:1. this指標是隱含每乙個非靜態成員函式內的一種指標

2.this 指標不需要定義,直接使用即可。

用途:1.當形參和成員變數同名時,可用this指標來區分

2.在類的非靜態成員變數中返回物件本身,可使用return *this

class person

int age;

};void test01()

main()

如果不加 this 都會預設為形參 age ,從而報錯。

this 指向被呼叫的物件,此時為 p1。

class person

void personaddage(person &p)

int age;

};void test01()

//返回物件本身用*this

void test02()

int main()

此時p2為 20 ,若要多次相加需要改動為

class person

person& personaddage(person &p)//此處void 改為peroson是因為返回值如果是p2的話,就可以將p2.personaddage(p1) 看作p2,然後繼續呼叫之後的personaddage(p1)

//此處的person &p是以 引用的方式傳入

//此處的person& 是以引用的方式返回

int age;

};void test01()

//返回物件本身用*this

void test02()

int main()

鏈式程式設計思想:可以往後無限的追加。

但如果函式,不使用引用方法,返回的是乙個值,就會建立新的物件

person personaddage(person &p)//不使用引用方法

int age;

};在第一次呼叫person personaddage()後 ,p2加了10, 但在這之後返回的並不是本體了,而是根據本體建立的乙個新的資料。person 和 *this 是不一樣的資料(見拷貝建構函式的呼叫時機-以值方式返回區域性物件)。 所以每一次person personaddage()後,都是乙個新的物件,所以最後輸出結果p2 是不變的20。

疑問:至於為什麼不是p2 為 10 。 以值方式返回區域性物件會呼叫拷貝建構函式。對p2進行一次personaddage操作後,將p2的結果拷貝為p2' 。所以p2還是程式設計客棧經過了一次加年齡的操作的 。對p2進行一次personaddage操作後,將p2的結果拷貝為p2'

本文標題: c++物件模型和this指標詳解

本文位址: /ruanjian/c/433603.html

c 物件模型和this指標

1.成員變數和成員函式分開儲存 在c 中類內的成員變數和成員函式分開儲存,只有非靜態的成員變數才屬於類的物件上 c 編譯器會給每個空物件也分配乙個記憶體空間,是為了區分空物件佔記憶體的位置 this指標是隱含每乙個非靜態成員函式內的一種指標 this指標不需要定義,直接使用即可 this指標指向被呼...

c 物件模型和this指標

成員變數和成員函式分開儲存 類內的成員變數和成員函式分開儲存 只有非靜態成員變數才屬於類的物件上,靜態成員變數以及函式都不屬於物件 空物件占用記憶體空間為1 c 編譯器會給每隔空物件也分配乙個位元組空間,是為了區分空物件佔記憶體的位置 每個空物件也應該有乙個獨一無二的記憶體位址 this指標的概念 ...

C 物件模型和this指標

在c 中,類內的成員變數和成員函式分開儲存 只有非靜態成員變數才屬於類的物件上 include using namespace std 成員變數 和 成員函式 是分開儲存的 class person static void func2 靜態成員函式,不佔物件空間 int person m b 10 ...