當前位置:編程學習大全網 - 編程語言 - C++this指針的詳細解析

C++this指針的詳細解析

在前面曾經提到過: 每個對象中的數據成員都分別占有存儲空間,如果對同壹個類定義了n個對象,則有n組同樣大小的空間以存放n個對象中的數據成員。但是,不同對象都調用同壹個函數代碼段。

那麽,當不同對象的成員函數引用數據成員時,怎麽能保證引用的是所指定的對象的數據成員呢?假如,對於例9.6程序中定義的Box類,定義了3個同類對象a,b,c。

如果有a.volume( ) ,應該是引用對象a中的height,width和length,計算出長方體a的體積。

如果有b.volume( ) ,應該是引用對象b中的height,width和length,計算出長方體b的體積。

而現今都用同壹個函數段,系統怎樣使它分別引用a或b中的數據成員呢?在每壹個成員函數中都包含壹個特殊的指針,這個指針的名字是固定的,稱為this指針。它是指向本類對象的指針,它的值是當前被調用的成員函數所在的對象的起始地址。

例如,當調用成員函數a.volume時,編譯系統就把對象a的起始地址賦給this指針,於是在成員函數引用數據成員時,就按照this的指向找到對象a的數據成員。例如volume函數要計算height*width*length的值,實際上是執行:

(this->height)*(this->width)*(this->length)

由於當前this指向a,因此相當於執行:

(a.height)*(a.width)*( a.length)

這就計算出長方體a的體積。

同樣如果有b.volume( ) ,編譯系統就把對象b的起始地址賦給成員函數volume的this指針,顯然計算出來的是長方體b的體積。this指針是隱式使用的,它是作為參數被傳遞給成員函數的。

本來,成員函數volume的定義如下:

int Box::volume( )

{

return (height*width*length);

}

C++把它處理為

int Box::volume(Box *this)

{

return (this->height * this->width * this->length);

}

即在成員函數的形參表列中增加壹個this指針。

在調用該成員函數時,實際上是用以下方式調用的:

a.volume(&a);

將對象a的地址傳給形參this指針。然後按this的指向去引用其他成員。

需要說明: 這些都是編譯系統自動實現的,編程序者不必人為地在形參中增加this指針,也不必將對象a的地址傳給this指針。在需要時也可以顯式地使用this指針。

例如在Box類的volume函數中,下面兩種表示方法都是合法的、相互等價的。

return (height * width * length); //隱含使用this指針

return (this->height * this->width * this->length); //顯式使用this指針

可以用*this表示被調用的成員函數所在的對象,*this就是this所指向的對象,即當前的對象。

例如在成員函數a.volume( )的函數體中,如果出現*this,它就是本對象a。上面的return語句也可寫成

return((*this).height * (*this).width * (*this).length);

註意*this兩側的括號不能省略,不能寫成*this.height。

所謂“調用對象a的成員函數f”,實際上是在調用成員函數f時使this指針指向對象a,從而訪問對象a的成員。在使用“調用對象a的成員函數f”時,應當對它的含義有正確的理解。

  • 上一篇:關於電腦芯片的問題!
  • 下一篇:凱迪拉克ATS怎麽提升動力,需要刷ecu麽 怎麽弄 德州方圓車改
  • copyright 2024編程學習大全網