C this指標詳解

2022-04-23 04:28:08 字數 1924 閱讀 3676

this 是c++中的乙個關鍵字,也是乙個常量指標,指向當前物件(具體說是當前物件的首位址)。通過 this,可以訪問當前物件的成員變數和成員函式。

所謂當前物件,就是正在使用的物件,例如對於stu.say();,stu 就是當前物件,系統正在訪問 stu 的成員函式 say()。
假設 this 指向 stu 物件,那麼下面的語句中,this 就和 pstu 的值相同:

studentstu; //通過student類來建立物件

student*pstu = &stu;

[示例] 通過 this 來訪問成員變數:

classstudent;

void student::setname(char *name)

void student::setage(int age)

void student::setscore(float score)

本例中,函式引數和成員變數重名是沒有問題的,因為通過 this 訪問的是成員變數,而沒有 this 的變數是函式內部的區域性變數。例如對於this->name = name;語句,賦值號左邊是類的成員變數,右邊是 setname 函式的區域性變數,也就是引數。

下面是乙個完整的例子:

#include

using namespace std;

classstudent;

void student::setname(char *name)

void student::setage(int age)

void student::setscore(float score)

void student::say()

int main()

執行結果:

小明的年齡是 15,成績是 90.5

李磊的年齡是 16,成績是 80

物件和普通變數類似;每個物件都占用若干位元組的記憶體,用來儲存成員變數的值,不同物件占用的記憶體互不重疊,所以操作物件a不會影響物件b。

上例中,建立物件 stu1 時,this 指標就指向了 stu1 所在記憶體的首位元組,它的值和 &stu1 是相同的;建立物件 stu2 時,this 等於 &stu2;建立物件 stu3 時也一樣。

我們不妨來證明一下,給 student 類新增乙個成員函式,輸出 this 的值,如下所示:

void student::printthis()

然後在 main 函式中建立物件並呼叫 printthis:

studentstu1, *pstu1 = &stu1;

stu1.printthis();

cout<<;

studentstu2, *pstu2 = &stu2;

stu2.printthis();

cout<<;

執行結果:

0x28ff30

0x28ff30

0x28ff10

0x28ff10

可以發現,this 確實指向了當前物件的首位址,而且對於不同的物件,this 的值也不一樣。

幾點注意:

實際上,this 指標是作為函式的引數隱式傳遞的,它並不出現在引數列表中,呼叫成員函式時,系統自動獲取當前物件的位址,賦值給 this,完成引數的傳遞,無需使用者干預。

this 作為隱式引數,本質上是成員函式的區域性變數,不占用物件的記憶體,只有在發生成員函式呼叫時才會給 this 賦值,函式呼叫結束後,this 被銷毀。

正因為 this 是引數,表示物件首位址,所以只能在函式內部使用,並且物件被例項化以後才有意義。

在《c++函式編譯原理和成員函式的實現》一節中講到,成員函式最終被編譯成與物件無關的普通函式,除了成員變數,會丟失所有資訊,所以編譯時要在成員函式中新增乙個額外的引數,把當前物件的首位址傳入,以此來關聯成員函式和成員變數。這個額外的引數,實際上就是 this,它是成員函式和成員變數關聯的橋梁。

c this 指標詳解

首先來觀察一段 class myclass int data const void tmyclass 我們知道類的成員函式在記憶體只有乙份拷貝,而類的資料成員 不考慮靜態成員 是每個物件都有自己的乙份,所以上述 中obj1和obj2呼叫data函式是同乙個函式,但它們擁有各自的資料,所以輸出結果為0...

C this指標詳解

this 是c 中的乙個關鍵字,也是乙個常量指標,指向當前物件 具體說是當前物件的首位址 通過 this,可以訪問當前物件的成員變數和成員函式。所謂當前物件,就是正在使用的物件,例如對於stu.say stu 就是當前物件,系統正在訪問 stu 的成員函式 say 假設 this 指向 stu 物件...

C this指標詳解

this 是 c 中的乙個關鍵字,也是乙個 const 指標,它指向當前物件,通過它可以訪問當前物件的所有成員。所謂當前物件,是指正在使用的物件。例如對於stu.show stu 就是當前物件,this 就指向 stu。下面是使用 this 的乙個完整示例 include using namespa...