this 指標(C++學習筆記 22)
-
當定義了一個類的若干物件後,系統會為每一個物件分配儲存空間。
-
如果一個類包含了資料成員和成員函式,就要分別為資料和函式的程式碼分配儲存空間。
-
事實上,給物件賦值就是給物件的資料成員賦值,不同物件的儲存單元中存放的資料值通常是不同的,而不同物件的函式程式碼是相同的,不論呼叫哪一個物件的成員函式,其實呼叫的都是相同內容的程式碼。
-
每個物件的儲存空間都只是該物件的資料成員所佔用的儲存空間,而不包括成員函式程式碼所佔用的空間,函式程式碼是儲存在物件空間之外的。
-
每個物件都有屬於自己的資料成員,但是所有物件的成員函式程式碼卻合用一份。
-
this 指標,稱為自引用指標。每當建立一個物件時,系統就把 this 指標初始化為指向該物件,即 this 指標的值是當前呼叫成員函式的物件的起始地址
-
this 指標是隱式使用的,它是作為引數被傳遞給成員函式的。
-
例如,當呼叫成員函式 a.disp 時,編譯系統就把物件 a 的起始地址賦給 this 指標,於是在成員函式引用資料成員時:
cout<<“x=”<< this->x <<endl;
相當於執行:
cout<<“x=”<<a.x<<endl; -
this 指標的作用:每當呼叫一個成員函式時,系統就自動把 this 指標作為一個隱含的引數傳給該函式。不同的物件呼叫同一個成員函式時,C++編譯器將根據成員函式的 this 指標所指向的物件來確定應該引用哪一個物件的資料成員。
-
例如,成員函式的定義如下:
void disp( ){
cout<<" x= "<<x<<endl;
}
實際是相當於執行:
void disp( * this ){
cout<<“x=”<< this->x<<endl;
}
在呼叫時a.disp( )也被處理成 a.disp(&a)
例 1 : 顯示 this 指標的值
#include<iostream>
using namespace std;
class A{
public:
A(int x1){
x= x1;
}
void disp(){
cout<<"this="<<this<<" when x="<<this->x<<endl;
}
private:
int x;
};
int main(){
A a(1),b(2),c(3);
a.disp();
b.disp();
c.disp();
return 0;
}
輸出結果如下: