我一直在學習C++,我與此刻類練習。 我創建了一個類,它存儲了玩家的名字和分數,並定義了一些函數來操縱數據並顯示它。返回「this」指針在const函數
其中一個我創建的功能是比較的兩名球員得分和指針 返回到播放器具有更高的分數。這是函數:
Player * Player::highestScore(Player p2)const
{
if(p2.pScore>pScore)
{
return &p2;
}
else
{
return this;
}
}
從主我創建以下球員:
Player p1("James Gosling",11);
Player *p4 = new Player("Bjarne Stroustrup",5);
我所說的highestScore功能:
Player *highestScore = p1.highestScore(*p4);
但是正如你可能已經從閱讀注意函數本身,當我將指針返回到調用該方法的對象時(如果它的分數較高),我得到一個錯誤消息:
return value type does not match the function type
這個問題似乎當我聲明函數的返回類型爲const
,像這樣消失:
const Player * Player::highestScore(Player p2)const
是困惑我的是,爲什麼它讓我return &p2
的一部分,這是不const
並且不允許我回去this
,這是一個指向調用的函數,這是不是一個const
以及對象?即使傳遞給參數的參數不是一個const Player對象,即使我將函數返回類型聲明爲const,它仍然允許我使用return &p2
?
如果這個問題似乎很奇怪或什麼,我試圖做的是非常糟糕的編程,但它做它只是一個學習的目的對不起。
這個以前回答的問題可能有幫助 - http://stackoverflow.com/questions/6919330/return-this-in-c –
'this'是const,因爲成員函數被聲明爲const。參數'p2'不會在參數列表中聲明爲'const',因此您可以*返回它的地址,但是請注意這樣做,您將返回由-val推送的堆棧變量的地址,以及因此,如果該地址在您的成員函數外被引用,則是未定義的行爲。 – WhozCraig
@WhozCraig:對,他可能是指'const Player * Player :: highestScore(Player&p2)const',使用參考 –