當在不同的對象中采用this指針,就已經是在給它賦值了。對象各自的this指針指向各自對象的首地址,所以不同對象的this指針一定指向不同的內存地址。
this 指針是由系統自動提供的指向對象的特殊指針。
this指針的含義及其用法:
1. this指針是一個隱含於每一個成員函數中的特殊指針。它指向正在被該成員函數操作的那個對象。
2. 當對一個對象調用成員函數時,編譯程序先將該對象的地址付給系統創建的this指針,然后調用成員函數。每次成員函數存取數據成員時,都隱含使用this指針。同樣也可以的使用*this來標識調用該成員函數的對象。
3. 當一個成員函數被調用時,自動向它傳遞一個隱含的參數,該參數是一個指向這個成員函數所在的對象的指針。
4. 在C++中,this指針被隱含地聲明為: X *const this,這意味着不能給this 指針賦值;
在X類的const成員函數中,this指針的類型為:const X* const, 這說明this指針所指向的這種對象是不可修改的(即不能對這種對象的數據成員進行賦值操作);
5. 由於this並不是一個常規變量,所以,不能取得this的地址。
6. 在以下場景中,經常需要顯式引用this指針
(1) 為實現對象的鏈式引用(如例1);
(2) 為避免對同一對象進行賦值操作(如例2);
(3) 在實現一些數據結構時,如list.
7. 舉例:
下面通過一個例子來說明:
#include<iostream> using namespace std; class A { public: A() { a=b=0; } A(int i,int j) { a=i; b=j; } void copy(A &aa); void print(); private: int a,b; }; void A::copy(A &aa) { if(this==&aa) return ;//如果this指針指向的是當前對象的地址,則直接跳出函數,反之將對象的值付給指針所指向的地址。 *this=aa;//對於指針this進行賦值,* + 指針,表示地址。 } void A::print() { cout<<a<<" "<<","<<b<<endl; } int main() { A a1,a2(3,4); a1.copy(a2); a2.print(); a1.print(); return 0; }
程序執行結果是:
3 , 4
說明: 在該程序中,類A的成員函數copy()內,出現了兩次this指針。其中,*this是操作該成員函數的對象的地址,從main()中可以看出操作該成員函數的對象是a1。*this是操作函數的對象,而下邊語句:
*this=aa;
表示將形參aa獲得的某個對象的值賦值給該成員函數的對象。在上述例子中,操作該成員函數的對象也是a1。
原文鏈接:https://blog.csdn.net/qq_44863179/article/details/100677447
https://blog.csdn.net/cherish_2012/article/details/21181695