我一直在学习 C++,目前正在上课练习。我创建了一个类来存储玩家的姓名和分数,并定义了操作数据和显示数据的函数。
我创建的功能之一是比较两个玩家的分数,并将指针返回给分数较高的玩家。这是功能:
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
也不允许我返回this
,它是一个指向调用函数的对象的指针,它也不是const
?此外,即使我将函数返回类型声明为 const,它仍然允许我这样做return &p2
,即使传递给参数的参数不是 const Player 对象?
对不起,如果这个问题看起来很奇怪,或者我想要做的是非常糟糕的编程,但这只是为了边做边学。