1. 程式人生 > >【轉載】c++中的this指標

【轉載】c++中的this指標

原連結:https://blog.csdn.net/u012372584/article/details/39032361?utm_source=blogxgwz1

原連結上的內容較亂,特意整理了一下

this指標

        在建立物件時,系統會為每一個物件分配獨立的儲存空間,也就是給每個物件中的資料成員都分配有自己獨立的儲存空間。如果對同一個類定義n個物件,則有n組同樣大小的空間以存放物件中的資料成員。但對於成員函式來說,它不同於物件中的資料成員,一個函式的程式碼段在記憶體中只有一份。也就是說,同一個類中的不同物件在呼叫自己的成員函式時,其實它們呼叫的是同一段函式程式碼。例如用一個類定義10個物件,編譯系統並不是分別為10個物件的資料成員和成員函式分配儲存單元,而是僅為每個物件的資料成員分配儲存單元,10個物件的成員函式對應的是同一個函式程式碼段。不論成員函式在類內定義還是在類外定義,成員函式都用以上方式儲存。

        那麼,當一個物件呼叫自己的成員函式時,如何保證成員函式中對資料成員的處理是針對自己的資料成員而不是其他物件的資料成員呢?

        其實,在每一個成員函式中都包含一個特殊的指標,這個指標的名字是固定的,稱為this。 它的值是當前被呼叫的成員函式所在的物件的起始地址。在呼叫成員函式時,系統隱式地將物件的起始地址傳遞給成員函式,使this指標得到當前物件的地址,例如a.fun(1) ==> fun(&a,1)。於是在成員函式中對資料成員的引用,就按照this的指向找到物件的資料成員,實現對資料成員的操作。也就是說, 成員函式中資料成員名的前面隱含有“this->” 的指向:

int Box∷tiji( )  {return (h*w*l); }

int Box∷tiji( )  {return (this->h*this->w*this->l); }