天天看點

C++ this指針解析this指針經典比喻:        

this指針用處:

          this指針是在學習c++中的類時提出的。一個類對象的this指針并不是對象本身的一部分,在用sizeof()計算對象大小時隻有成員變量的大小。既沒有成員函數的大小,也沒有this指針的四個位元組的大小。當在類的非靜态成員函數通路類的非靜态成員時,編譯器會自動将對象的位址傳給作為隐含參數傳遞給函數,這個隐含參數就是this指針。即使你并沒有寫this指針,編譯器在連結時也會加上this的,對各成員的通路都是通過this的。例如你建立了類的多個對象時,在調用類的成員函數時,你并不知道具體是哪個對象在調用,此時你可以通過檢視this指針來檢視具體是哪個對象在調用。 例:       

Student std;
std.InitStudent(9)
           

實際利用下面來完成

this指針經典比喻:

        當我們在進入一個房子之後,可以看見房子裡的桌子,椅子、地闆等,但是看不到房子的全貌。對于一個類的執行個體來說,你可以看到它的成員函數、成員變量,但是執行個體本身呢?this是一個指針,它時時刻刻指向這個執行個體。

this指針的特性:

1.this指針的類型是 類類型* char  (指向類類型的指針)

2.this指針隻能在類成員函數中使用(全局函數和靜态函數不能使用)

   實際上成員函數預設第一個參數為T *const this

例:

class Student
{
public:
      void Funtest(int a)
      {
       }
};
           

實際函數原型編譯器預設為

void Funtest(Student * const this,int a)
           

__thiscall調用約定:

a、__thiscall隻能夠用在類的成員函數上。

a、參數從右向左壓棧。

b、如果參數個數确定,this指針通過ecx傳遞給被調用者;如果參數不确定,this指針在所有參數被壓棧後壓入堆棧。

c、對參數個數不定的,調用者清理堆棧,否則函數自己清理堆棧

繼續閱讀