c++ this 指標詳解
學習 c++ 的指標既簡單又有趣。通過指標,可以簡化一些 c++ 程式設計任務的執行,還有一些任務,如動態記憶體分配,沒有指標是無法執行的。所以,想要成為一名優秀的 c++ 程式設計師,學習指標是很有必要的。
正如您所知道的,每乙個變數都有乙個記憶體位置,每乙個記憶體位置都定義了可使用連字型大小(&)運算子訪問的位址,它表示了在記憶體中的乙個位址。
this指標是類的乙個自動生成、自動隱蔽的私有成員,它存在於類的非靜態成員中,指向被呼叫函式所在的物件。
全域性僅有乙個this指標,當乙個物件被建立時,this指標就存放指向物件資料的首位址。
class ctest
void print()程式設計客棧
private:
int _ivalue;//呼叫私有變數只能用公有成員接收,成員變數在類中具有全域性作用域
};int main()
我們來觀察對funtest函式的呼叫,test.funtest(),在這裡,我們運用了點運算子來訪問test物件的funtest成員,然後呼叫它。
當我們呼叫某個成員函式時,實際上是在替某個物件呼叫它。如果funtest指向ctest的成員(例如ivalue),則它隱式地指向呼叫該函式的物件的成員。
成員函式通過乙個名為this的額外的隱式引數來訪問呼叫它的那個物件。當我們呼叫那個函式時,用請求該函式的物件位址初始化this.例如:如果呼叫
test.funtest(),則編譯器負責把test的位址傳遞給funtest的隱式形參this。可以等價的認為編譯器將該呼叫重寫成了如下形式:
//此處只用於說明呼叫程式設計客棧成員函式實際執行過程
ctest::funtest(&test)
在成員函式內部,我們可以直接使用呼叫該函式的成員,而無需通過成員訪問運算子來做到,因為this指標所指的正是這個物件。任何對類成員的直接訪問都 被看做是this指標的隱式引用,上面的程式可認為是this->ivalue.程式設計客棧
this形參是隱式定義的,實際上,任何自定義名為this的引數或變數的行為都是非法的.所以,funtest函式的定義相當於是
void funtest(ctest *const this,int *ivlue)
this是乙個常量指標,不允許改變this中儲存的位址
this指標的兩種傳參方式:
1.引數壓棧:當成員函式的引數可變時,遵www.cppcns.com循_cdecl呼叫約定
2.ecx暫存器:當成員函式的引數固定時,這時遵循_thiscall呼叫約定。
當this指標為null時編譯器可編譯通過
class ctest
} int main()
本文標題: c++ 中的this指標詳解及例項
本文位址:
C語言指標例項詳解
include a是指標變數 a就代表儲存位址 void test1 int a printf 指標與位址 n int var 20 實際變數的宣告 int ip 指標變數的宣告 int var 20 int ip var 等價於 ip ip 等價於 var ip 就相當於儲存位址 int var1...
C 中引用和指標的關係例項詳解
c 中引用和指標的關係例項詳解 1.引用在定義時必須初始化,指標沒有要求 int rnum 未初始化程式設計客棧不能通過編譯 int pnum 可以 2.一旦乙個引用被初始化為指向乙個物件,就不能再指向 其他物件,而指標可以在任何時候指向任何乙個同型別物件 int inum 10 int inum2...
詳解C 中的this指標
有下面的乙個簡單的類 class cnullpointcall int cnullpointcall m istatic 0 void cnullpointcall test1 void cnullpointcall test2 void cnullpointcall test3 int itest...