1. this指針的用處: 一個對象的this指針並不是對象本身的一部分,不會影響sizeof(對象)的結果。 請細品以下概念 this作用域是在類內部,當在類的非靜態成員函數中訪問類的非靜態成員的時候,編譯器會自動將對象本身的地址作為一個隱含參數傳遞給函數。也就是說,即使你沒有寫上this指針,編 ...
1. this指針的用處: 一個對象的this指針並不是對象本身的一部分,不會影響sizeof(對象)的結果。----請細品以下概念 this作用域是在類內部,當在類的非靜態成員函數中訪問類的非靜態成員的時候,編譯器會自動將對象本身的地址作為一個隱含參數傳遞給函數。也就是說,即使你沒有寫上this指針,編譯器在編譯的時候也是加上this的,它作為非靜態成員函數的隱含形參,對各成員的訪問均通過this進行。 2. this指針的使用: 一種情況就是,在類的非靜態成員函數中返回類對象本身的時候,直接使用 return *this;另外一種情況是當參數與成員變數名相同時,如this->n = n (不能寫成n = n)。 3. this指針程式示例: this指針是存在與類的成員函數中,指向被調用函數所在的類實例的地址。

1.當形參和成員變數同名時,可以用this指針來區別
1 class Data 2 { 3 public: 4 int num; 5 6 //形參和成員名相同 7 void setNum(int num) 8 { 9 //形參num 10 //成員num this->num 11 //num = num;//就近原則 形參num賦值給形參num 12 this->num = num; 13 //將形參num賦值給對象中成員num 14 } 15 }
2.在類的普通成員函數中返回對象本身(*this)(很重要)
1 #include <iostream> 2 using namespace std; 3 4 class A 5 { 6 public: 7 int get() const{return i;} 8 void set(int x){this->i=x;cout<<"this指針保存的記憶體地址為:"<<this<<endl;} 9 private: 10 int i; 11 }; 12 13 int main() 14 { 15 A a; 16 a.set(9); 17 cout<<"對象a所在的記憶體地址為:"<<&a<<endl; 18 cout<<"對象a所保存的值為:"<<a.get()<<endl; 19 cout<<endl; 20 A b; 21 b.set(999); 22 cout<<"對象b所在的記憶體地址為:"<<&b<<endl; 23 cout<<"對象b所保存的值為:"<<b.get()<<endl; 24 return 0; 25 }
總結:通過這個輸出結果,我們可以看到,對象a的記憶體地址和this指針的一模一樣(都是0017F7E8);而當運行到對象b的時候,它的記憶體地址又和它所對應的this指針指向的記憶體地址一模一樣了(都是0017F7DC)。這就說明瞭this指針變數記錄的是當前對象的記憶體地址,即this指針指向當前的對象!我們可以看到this指針最大的作用就是它保存了當前對象的地址,並且應用指針的形式指向了當前的對象。