C this指標詳解

2022-02-02 03:44:25 字數 1585 閱讀 6292

this指標:

每個成員函式都有乙個隱含的輸入引數this指標,this指向當前物件,this指標可以用來訪問物件的資料成員。

class

b

void fun() const

intx;

inty;

};int

main()

結果:當前物件的this指標型別:

當前物件的this指標型別:

當前物件的this指標型別:

class b const *

結論:成員函式是屬於類的,成員資料是屬於物件的。

程式修改成:

class

b

void fun() const

void

fun()

intx;

inty;

};int

main()

結果:當前物件的this指標型別:

當前物件的this指標型別:

當前物件的this指標型別:

class b const *

結論:當前this指標的型別不僅與物件(const or not)有關,還與物件所呼叫的成員函式有關。

那麼,為什麼可以用this指標訪問成員函式呢?

class

b

void

fun2()

};

猜測:每個物件都需要訪問成員函式,那麼,該物件裡一定複製了類的成員函式(應該放在記憶體的程式段)的位址;既然物件與類有關,那麼物件裡除了資料成員之外,肯還有其他與類相關的資訊。

還有一種可能是,類的成員函式在編譯時都修飾成類名有關的名稱,這個名稱變成了全域性唯一的函式名,這些函式都應該放在記憶體的**段位置;當物件訪問成員函式時,將直接使用修飾過後的名稱來呼叫;而非類的物件呼叫類的成員函式時,無法使用修飾過的函式名,所以訪問出錯。這樣看來,通過this指標訪問成員函式,與直接訪問成員函式沒有區別,或者說this指標與成員函式沒有關係。之所以允許這種寫法,是為了讓人看上去更直觀一些。

static成員函式與this指標:

static成員函式沒有預設將this指標引數,所以static成員無法訪問物件的資料,只能訪問static資料成員。 

為什麼說this指標不是物件的一部分?this指標所占用的記憶體不會反應在sizeof的結果中?

this指標是動態構造的,只有在呼叫非靜態成員函式時,才臨時構造並傳入到成員函式的形參中,呼叫完畢則被銷毀(與形參的屬性一致),猜測這就是平時並不占用物件的記憶體的原因。

虛函式中的this指標:

在虛函式所在類中,有一張虛函式表,而類的物件則有乙個虛表指標,指向這張虛表。當虛函式被子類的函式覆蓋(重寫)時,虛函式表中的相應位置的函式指標將被替換成子類的函式指標。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...