天天看點

c++ this指針詳細介紹

一、this指針的知識:

每個對象通過this指針來通路自己的位址。this指針并不是對象的一部分,this指針所占

的記憶體大小是不會反應在sizeof操作符裡。this指針的類型取決于使用(this指向的)對

象類型。

二、為什麼靜态方法裡沒有this指針?

靜态方法和靜态變量一樣,它不屬于某個對象,是所有對象共享的成員,可以說

他是屬于類的。而this指針是指向具體的某個對象的。是以靜态方法裡不含有this指針。

三、this指針什麼時候建立的?

this在成員函數的開始執行前指派,在成員函數執行結束後清除。

實際上編譯器是這樣實作this指針的:

1.改變類成員函數的定義,用附加參數this指針來确定具體的對象。如:

void Cgoods::RegisterGoods(Cgoods*this,char*nam,int amount,float price)

{

    strcpy(this->Name,name);this->Amount=amount;

    this->price=price;

}

2.每個類成員函數的調用,加上一個附加的實參——被調用對象的位址。如:

    Car1.RegisterGoods ( String , number , pr );

改變為:

    RegisterGoods ( &Car1 , String , number , pr);

編譯器會在每個非靜态的成員函數裡加上一個this指針,當某個對象調用成員時,this指

針會指向該對象位址。在成員函數執行完後清除,隻是清除棧空間。

繼續閱讀