this指針

一個對象的this指針並不是對象本身的一部分,不會影響sizeof(對象)的結果。this作用域是在類內部,當在類的非靜態成員函式中訪問類的非靜態成員的時候,編譯器會自動將對象本身的地址作為一個隱含參數傳遞給函式。也就是說,即使你沒有寫上this指針,編譯器在編譯的時候也是加上this的,它作為非靜態成員函式的隱含形參,對各成員的訪問均通過this進行。

基本信息

例如

調用date.SetMonth(9)<===>SetMonth(&date,9),this幫助完成了這一轉換。

使用

一種情況就是,在類的非靜態成員函式中返回類對象本身的時候,直接使用return*this;另外一種情況是當參數與成員變數名相同時,如this->n=n(不能寫成n=n)。

程式示例

this指針是存在與類的成員函式中,指向被調用函式所在的類實例的地址。
根據以下程式來說明this指針
#include<iostream.h>
classPoint
{
intx,y;
public:
Point(inta,intb){x=a;y=b;}
voidMovePoint(inta,intb){x+=a;y+=b;}
voidprint(){cout<<"x="<<x<<"y="<<y<<endl;}
};
voidmain()
{
Pointpoint1(10,10);
point1.MovePoint(2,2);
point1.print();
}
當對象point1調用MovePoint(2,2)函式時,即將point1對象的地址傳遞給了this指針。
MovePoint函式的原型應該是voidMovePoint(Point*this,inta,intb);第一個參數是指向該類對象的一個指針,我們在定義成員函式時沒看見是因為這個參數在類中是隱含的。這樣point1的地址傳遞給了this,所以在MovePoint函式中便顯式的寫成:
voidMovePoint(inta,intb){this->x+=a;this->y+=b;}
即可以知道,point1調用該函式後,也就是point1的數據成員被調用並更新了值。
即該函式過程可寫成point1.x+=a;point1.y+=b;
4.關於this指針的一個精典回答:
當你進入一個房子後,
你可以看見桌子、椅子、地板等,
但是房子你是看不到全貌了。
對於一個類的實例來說,
你可以看到它的成員函式、成員變數,
但是實例本身呢?
this是一個指針,它時時刻刻指向你這個實例本身

相關詞條

相關搜尋

熱門詞條

聯絡我們