1. 程式人生 > >C++中this指標的作用以及用法詳解

C++中this指標的作用以及用法詳解

為什麼引用this指標?

當我們在類中定義了一個變數,同時又在類成員函式中定義了同一個變數時,也就是變數名重複時,但是我們要想使用類中的定義的變數,此時就需要this指標了。

1.this指標的作用

指標存在於類的成員函式中,指向被呼叫函式類例項的地址。

 一個物件的this指標並不是物件本身的一部分,不會影響sizeof()的結果。

this指標的作用域是在類內部,當在類的非靜態成員函式中訪問類的非靜態成員的時候,編譯器會自動將物件本身的地址作為一個隱含引數傳遞給函式。換句話說就是,及時你沒有用this指標,編譯器在編譯的時候也會自動加上this的,它是一個隱含形參,對各成員的訪問均通過this進行。

2.this指標的使用

(1)在類的非靜態成員函式中返回類物件本身的時候,直接使用 return *this;

(2)當引數與函式成員變數名相同時,應使用 this.age = age;

3.this指標的特點

 (1)this指標只能在成員函式中使用

          全域性函式,靜態函式都不能使用this指標,其實,成員函式的第一個預設引數是 *const  this

例:class Student()

{

int fun(int x)

{

}

};

函式fun(int x)的原型在編譯器看來就是 fun(Student *const this ,int x)

 (2)this 指標在成員函式的開始前構造,在成員函式的結束後清除,生命週期和其他函式引數一樣。當呼叫一個類的成員函式時,編譯器將類的指標作為函式的this引數傳遞進去。

如:Student stu;

stu.fun(3);

此時編譯器會編譯成:

Student::fun(&x,3);

(3)this指標會因編譯器不同而有不同的放置位置。可能是棧,也可能是暫存器,甚至全域性變數。

在彙編級 別裡面,一個值只會以3種形式出現:立即數、暫存器值和記憶體變數值。不是存放在暫存器就是存放在內 存中,它們並不是和高階語言變數對應的