C++中的this指針

當一個成員函數被調用時,自動向它傳遞一個隱含的參數,該參數是一個指向接 受該函數的調用的對象的指針,在程序中可以使用關鍵字this指針來引用改制鎮,因此稱該指針爲this指針。this指針是c++實現封裝的一種機制, 它將成員和用於操作這些成員的成員函數聯繫在一起。例如;Location類的成員函數init被定義爲:

void Location::init(int initx,int inity)

{

X=initx;

Y=inity;

}

其中對X和Y的引用表示在該成員函數被調用時,引用接受該函數調用的對象中的成員X和Y。例如,對於下面的語句:

Location ALocation;

ALocation.init(5,2);

當調用成員函數init()時,該成員函數的this指針指向對象ALocation。成員函數init中隊X和Y的引用表示是引用對象ALocation的成員X和Y。但成員函數init()如何知道這一點的呢?這由this指針來完成。

 c++編譯器所認識的成員函數init()的定義形式爲:

void Location::init(int initx,int inity)

{

this->X=initx;

this->Y=inity;

}

即對於該成員函數中的訪問任何類成員,c++編譯器都認爲是訪問this指針所指向的對象中的成員。由於不同的對象調用成員函數init()時, this指針指向不同的對象,因此,成員函數init()可以爲不同的對象X和Y置初值。使用this指針,保證每個對象可以擁有不同的數據成員,但處理 這些數據成員的代碼可以被所有的對象共享。

this 指針對c++程序員也很有用。下面的程序在Locatin類中增加了一個成員函數assign(),它帶有一個參數,它將函數對象的狀態置給接受該函數調用的對象。

class Location{

private:

int X,Y;

pubic:

void init(int initx,int inity);

void assign (Location& p);

int GetX( );

int GetY( );

};

void Location::assign (Location& p)

{

if (jthis ==&p)

;//使用obj.assign(obj)方式調用時,if語句的表達式this ==&p爲真

else{

        X=p.X;

       Y=p.Y;

   }

}

由於同一個對象之間相互賦值美哦與意義,所以這個函數使用this 指針判斷這種情況。

象本例這樣,當需要在成員函數中檢測接受函數調用的對象時,使用this 指針是恰當的。在本書後面的程序中,由於在成員函數中需要引用接受函數調用的對象,而不是該對象的成員,也經常使用this指針。

注意,在成員函數assign( )的定義中,該成員函數訪問了對象p的私有成員,這在c++中是合法的,因爲assign( )

是在類中說明的一個成員函數。一般而言,只要存在一個對象名或指向對象的指針(及引用),在類中說明的成員函數可以不受限制地訪問該類對象的私有成員。

this指針的類型爲

X  *const this;

其中X是一個類名。例如,對於Location類的成員函數而言,this指針的類型爲:

Location *const this;即它的類型爲Location類型的常量指針。

發佈了17 篇原創文章 · 獲贊 10 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章