this指針
前言
到目前爲止,每個類成員函數只涉及一個對象,即調用它的對象。
但是有時候成員函數可能涉及到兩個對象,這種情況下需要使用C++的this指針。
爲了學習this指針,我們定義一個類成員函數topval(),讓它查看兩個Share類對象,並返回股票總值較高的對象。
問題一:如何將要比較的兩個類對象提供給成員函數topval()呢?
xiong1.topval()將訪問xiong1對象的數據。
xiong2.topval()將訪問xiong2對象的數據。
爲了對兩個對象進行比較,我們必須將第二個對象作爲參數傳遞給topval()函數。
問題二:如何將函數的結果返回給調用程序呢?
最直接的方法是讓函數返回一個引用,該引用指向股票總值較高的對象。
函數聲明如下:
const Share &topval(const Share &object) const;
該函數隱式的訪問一個對象,顯示的訪問另一個對象,並返回其中一個對象的引用。
函數定義如下:
const Share & Share::topval(const Share &object) const {
if (total_value < object.total_value)
return object;
else
return ?????
}
可以看出,我們本意在是????處返回調用topval函數的類對象,但是問題在於我們如何稱呼這個對象?因爲我們還不知道程序將會定義的類對象是什麼?哪個類對象將會調用topval函數?
this指針
C++解決這個問題的方法是——使用被稱爲this的特殊指針,this指針指向用來調用成員函數的對象。
當我們調用一個成員函數時,調用該函數的類對象的地址其實已經默認初始化了this指針。
即
xiong.show();
等價於
Share::show(&xiong);
故函數定義如下:
const Share& Share::topval(const Share &object) const {
if (object.total_value > total_value)
return object;
else
return *this;
}