this指針的用法和基本分析


當在不同的對象中采用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM