1. 程式人生 > >this 指標(C++學習筆記 22)

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; }

輸出結果如下:
在這裡插入圖片描述