當乙個成員函式被呼叫時,自動向它傳遞乙個隱含的引數,該引數是乙個指向接 受該函式的呼叫的物件的指標,在程式中可以使用關鍵字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型別的常量指標。
C 中的this指標
1.this 指標的引入 每個成員函式 static函式外 都有乙個額外的隱含的this指標,乙個類物件在條用成員函式時this指標初始化為呼叫函式物件的位址。例1 sales item.h class sales item sales item.cpp bool sales item same i...
C 中的指標
在學習c c 過程中,指標是乙個比較讓人頭痛的問題,稍微不注意將會是程式編譯無法通過,甚至造成宕機。在程式設計過程中,指標也往往是產生隱含bug的原因。下面就來談談指標的應用以及需要注意的一些問題,裡面也許就有你平時沒有注意到的問題,希望能幫助各位讀者理解好指標。一 我們先來回憶一下指標的概念吧,方...
C 中的This指標
c 中使用this指標來指向用來呼叫成員函 數的物件。乙個物件 的this指標並不是物件本身的一部分,不會影響sizeof 物件 的結果。this 作用域是在類內部,當在類的非靜態成員函式中訪問類的非靜態成員的時候,編譯器會自動將 物件本身的位址作為乙個隱含 引數傳遞 給函式。也就是說,即使你沒有寫...