c this 指標詳解

2021-06-20 17:25:36 字數 1161 閱讀 9760

首先來觀察一段**:

class myclass 

int data() const

};void tmyclass()

我們知道類的成員函式在記憶體只有乙份拷貝,而類的資料成員(不考慮靜態成員)是每個物件都有自己的乙份,所以上述**中obj1和obj2呼叫data函式是同乙個函式,但它們擁有各自的資料,所以輸出結果為0和100。

我這裡要說明的問題是data()函式**是一樣的,都是返回m_data成員,為什麼會輸出不一樣的結果呢?這就是this指標發揮的作用,其實在每個類的非靜態成員函式中都隱藏了乙個引數——this指標,這個指標指向物件本身,並且不能被修改,上述**編譯器其實是這樣理解的:

class myclass 

int data(const myclass *const this) const

};void tmyclass()

這下理解this指標了吧?在語法上,這樣寫是編不過的,this作為c++的關鍵字,我們可以在非靜態成員函式中直接使用,且非靜態成員函式的第乙個this指標引數隱藏不寫,所以第一段**是正確的寫法,或者我們也可以在內部加上this指標寫成這樣:

class myclass 

int data() const

};void tmyclass()

其和第一段**的效果是一樣的。

由於多重繼承中子類物件包含基類物件的資料,當通過子類物件指標呼叫基類中的方法時,所傳入的this指標會有些不同,需要加一些偏移。我們來看這段**:

#include using namespace std;

struct a

};struct b

};struct c : a, b

};int main()

在我的64位平台上執行結果如下:

a's this: 0x1bfe430

b's this: 0x1bfe434

c's this: 0x1bfe430

注意在調bfoo時所傳入的this指標的差異,因為c的物件在記憶體中資料布局是先放a的資料,再放b的資料,再放c本身的資料,所以訪問b的成員時this指標須加上a資料的偏移。

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...

C this指標詳解

this指標 每個成員函式都有乙個隱含的輸入引數this指標,this指向當前物件,this指標可以用來訪問物件的資料成員。class b void fun const intx inty int main 結果 當前物件的this指標型別 當前物件的this指標型別 當前物件的this指標型別 c...