一、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指
針會指向該對象位址。在成員函數執行完後清除,隻是清除棧空間。