C++中this指標的理解和用法
先要理解class的意思。class應該理解為一種型別,象int,char一樣,是使用者自定義的型別。(雖然比 int char這樣build-in型別複雜的多,但首先要理解它們一樣是型別)。用這個型別可以來宣告一個變數,比如int x, myclass my等等。這樣就像變數x具有int型別一樣,變數my具有myclass型別。
理解了這個,就好解釋this了,my裡的this 就是指向my的指標。如果還有一個變數myclass mz,mz的this就是指向mz的指標。 這樣就很容易理解this 的型別應該是myclass *,而對其的解引用*this就應該是一個myclass型別的變數。
通常在class定義時要用到型別變數自身時,因為這時候還不知道變數名(為了通用也不可能固定實際的變數名),就用this這樣的指標來使用變數自身。
1. this指標的用處:
一 個物件的this指標並不是物件本身的一部分,不會影響sizeof(物件)的結果。this作用域是在類內部,當在類的非靜態成員函式中訪問類的非靜態 成員的時候,編譯器會自動將物件本身的地址作為一個隱含引數傳遞給函式。也就是說,即使你沒有寫上this指標,編譯器在編譯的時候也是加上this的, 它作為非靜態成員函式的隱含形參,對各成員的訪問均透過this進行。
例如,呼叫date.SetMonth(9) SetMonth(&date, 9),this幫助完成了這一轉換 .
2. this指標的使用:
一種情況就是,在類的非靜態成員函式中返回類物件本身的時候,直接使用 return *this;另外一種情況是當引數與成員變數名相同時,如this->n = n (不能寫成n = n)。
C++中this指標的理解和用法
先要理解class的意思。class應該理解為一種型別,象int,char一樣,是使用者自定義的型別。(雖然比 int char這樣build-in型別複雜的多,但首先要理解它們一樣是型別)。用這個型別可以來宣告一個變數,比如int x, myclass my等等。這樣就像變數x具有int型別一樣,變數my具有myclass型別。
理解了這個,就好解釋this了,my裡的this 就是指向my的指標。如果還有一個變數myclass mz,mz的this就是指向mz的指標。 這樣就很容易理解this 的型別應該是myclass *,而對其的解引用*this就應該是一個myclass型別的變數。
通常在class定義時要用到型別變數自身時,因為這時候還不知道變數名(為了通用也不可能固定實際的變數名),就用this這樣的指標來使用變數自身。
1. this指標的用處:
一 個物件的this指標並不是物件本身的一部分,不會影響sizeof(物件)的結果。this作用域是在類內部,當在類的非靜態成員函式中訪問類的非靜態 成員的時候,編譯器會自動將物件本身的地址作為一個隱含引數傳遞給函式。也就是說,即使你沒有寫上this指標,編譯器在編譯的時候也是加上this的, 它作為非靜態成員函式的隱含形參,對各成員的訪問均透過this進行。
例如,呼叫date.SetMonth(9) SetMonth(&date, 9),this幫助完成了這一轉換 .
2. this指標的使用:
一種情況就是,在類的非靜態成員函式中返回類物件本身的時候,直接使用 return *this;另外一種情況是當引數與成員變數名相同時,如this->n = n (不能寫成n = n)。