this指標:
每個成員函式都有乙個隱含的輸入引數this指標,this指向當前物件,this指標可以用來訪問物件的資料成員。
classb
void fun() const
intx;
inty;
};int
main()
結果:當前物件的this指標型別:
當前物件的this指標型別:
當前物件的this指標型別:
class b const *
結論:成員函式是屬於類的,成員資料是屬於物件的。
程式修改成:
classb
void fun() const
void
fun()
intx;
inty;
};int
main()
結果:當前物件的this指標型別:
當前物件的this指標型別:
當前物件的this指標型別:
class b const *
結論:當前this指標的型別不僅與物件(const or not)有關,還與物件所呼叫的成員函式有關。
那麼,為什麼可以用this指標訪問成員函式呢?
classb
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...