在函数c ++中更改时不保留类的公共变量

时间:2014-02-12 08:23:44

标签: c++ function class variables public

我发现了一个类似于这个问题的问题,虽然提出的方式比我认为的要复杂得多(问题得分为-2)。希望这会更容易理解。

事情的一般要点是涉及的两个类是GUI和Player(我在其他类的其他地方遇到了同样的问题,但是如果我能理解为什么这个不起作用,它应该适用于其余的)

GUI包含“Player.h”。 Player类有一个公共布尔变量'hasBall';当'Player'传递给函数Pass()并且布尔值改变时,它似乎只是一个临时对象,因此不会更新自己传递的对象。请参阅以下代码:

这很好,Plyr1A和Plyr2A(在Gui.h中定义)的布尔值被更改和保留

Plyr1A.hasBall = false; 
Plyr2A.hasBall = true;

然而,Plyr1A和Plyr2A的布尔值与此保持一致。

Pass(Plyr1A,Plyr2A);  //Boolean values for Plyr1A and Plyr2A remain the same with this.

void GUI::Pass(Player passer, Player receiver) {
    passer.hasBall = false;
    receiver.hasBall = true;
}

如果有人能向我解释为什么会这样,我会非常感激!如果需要任何额外信息,请告诉我。

干杯:)

3 个答案:

答案 0 :(得分:4)

您的函数复制了参数(它们是按值传递),然后更改副本,而不是“原始”对象(在函数体中)。

您应该将其更改为使用指针或引用,例如:

//-------------------v---------------v   <---these are references
void GUI::Pass(Player& passer, Player& receiver) {

当然,您也应该更改声明。

答案 1 :(得分:1)

使用引用传递对象。

答案 2 :(得分:0)

考虑这个功能:

void someFunction (int j)
{
    j = 8;
}

并说我们称之为:

someFunction (3);

您是否认为someFunction中的作业会以某种方式使3成为8?你的期望毫无意义。如果没有某种特殊的安排,那么函数内的赋值就不能改变调用者的值。