this指針

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章