私は C++ を学んでおり、現在クラスで練習しています。プレイヤーの名前とスコアを格納し、データを操作して表示する関数を定義するクラスを作成しました。
私が作成した関数の 1 つは、2 人のプレーヤーのスコアを比較し、スコアが高いプレーヤーへのポインターを返すことです。これは機能です:
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
次のように、関数の戻り値の型を a として宣言すると、この問題は解消されるconst
ようです。
const Player * Player::highestScore(Player p2)const
私を混乱させている部分は、関数を呼び出したオブジェクトへのポインターであるを返すことを許可しないreturn &p2
のはなぜですか? また、関数の戻り値の型を const として宣言しても、パラメーターに渡された引数が const の Player オブジェクトではない場合でも、それを行うことができますか?const
this
const
return &p2
質問が奇妙に思えたり、私がやろうとしていることが非常に悪いプログラミングである場合は申し訳ありませんが、それはそれを行うことによって学習することを目的としています.