class getter 函数 C++ 的奇怪输出
Weird output with class getter function C++
所以我的头文件中有一段飞镖游戏代码:
class Player
{
private:
string playerName;
int bullAccuracy;
int outerAccuracy;
int singleAccuracy;
public:
//getters
string& getName();
int& getBullAccuracy();
int& getSingleAccuracy();
//setters
void setName(string& name);
void setBullAccuracy(int& bull_accuracy);
void setSingleAccuracy(int& single_accuracy);
};
然后 .cpp 文件中相应的 getter 和 setter 函数如下所示:
//getters
string& Player::getName()
{
return playerName;
}
unsigned int& Player::getScore()
{
return playerScore;
}
int& Player::getBullAccuracy()
{
return bullAccuracy;
}
int& Player::getSingleAccuracy()
{
return singleAccuracy;
}
//setters
void Player::setName(string& name)
{
playerName = name;
}
void Player::setBullAccuracy(int& bull_accuracy)
{
bullAccuracy = bull_accuracy;
}
void Player::setSingleAccuracy(int& single_accuracy)
{
singleAccuracy = single_accuracy;
}
所有这些非常简单和基本的 getter/setter 代码用于 class 数据成员,对吧?
虽然在 main() 函数中,我为我的玩家设置了名称、他们的各种准确度,然后通过 getter 显示它们。所有这些都是使用对象向量和迭代器完成的,就像这样:
vector<Player> player(2);
vector<Player>::iterator modIter;
int bAccuracy, sAccuracy;
string playerName;
cout << "Input the name of the players: " << endl;
for (modIter = player.begin(); modIter != player.end(); modIter++)
{
cin >> playerName;
modIter->setName(playerName);
}
cout << "\nSet the players' bull accuracy:" << endl;
for (modIter = player.begin(); modIter != player.end(); modIter++)
{
cout << modIter->getName() << ": ";
cin >> bAccuracy;
modIter->setBullAccuracy(bAccuracy);
}
cout << "\nSet the players' single hit accuracy: " << endl;
for (modIter = player.begin(); modIter != player.end(); modIter++)
{
cout << modIter->getName() << ": ";
cin >> sAccuracy;
modIter->setBullAccuracy(sAccuracy);
}
//display values to check program working well so far
for (modIter = player.begin(); modIter != player.end(); modIter++)
{
cout << modIter->getBullAccuracy() << endl;
cout << modIter->getOuterAccuracy() << endl;
cout << modIter->getSingleAccuracy() << endl;
}
在 运行 代码之后,输入 "Joe" 和 "Sid" 作为名称,71 和 73 分别用于公牛准确度,然后 80 用于两个玩家单次命中准确度,这是我的控制台输出的结果:
输入选手姓名:
乔
席德
设置玩家的公牛精度:
乔:71
Sid: 73 //这意味着至少名称设置正确
设置玩家的单次命中精度:
乔:80
希德:80
//这是奇怪的输出
80 //这应该是71
-842150451 //还有这个80
80 //这里是73
-842150451 //这里又是 80
所以到底发生了什么,因为这是 getters 和 setters 的基本且熟悉的用法,我不知道如何自己调试它,因为我没有看到问题。我的代码中是否有我看不到的东西正在改变结果?
非常感谢您的帮助
当您提示单精度时,您仍在调用 setBullAccuracy
方法,而不是 setSingleAccuracy
。你也没有初始化你的成员变量,这就是为什么打印出 singleAccuracy
给你垃圾。
所以我的头文件中有一段飞镖游戏代码:
class Player
{
private:
string playerName;
int bullAccuracy;
int outerAccuracy;
int singleAccuracy;
public:
//getters
string& getName();
int& getBullAccuracy();
int& getSingleAccuracy();
//setters
void setName(string& name);
void setBullAccuracy(int& bull_accuracy);
void setSingleAccuracy(int& single_accuracy);
};
然后 .cpp 文件中相应的 getter 和 setter 函数如下所示:
//getters
string& Player::getName()
{
return playerName;
}
unsigned int& Player::getScore()
{
return playerScore;
}
int& Player::getBullAccuracy()
{
return bullAccuracy;
}
int& Player::getSingleAccuracy()
{
return singleAccuracy;
}
//setters
void Player::setName(string& name)
{
playerName = name;
}
void Player::setBullAccuracy(int& bull_accuracy)
{
bullAccuracy = bull_accuracy;
}
void Player::setSingleAccuracy(int& single_accuracy)
{
singleAccuracy = single_accuracy;
}
所有这些非常简单和基本的 getter/setter 代码用于 class 数据成员,对吧?
虽然在 main() 函数中,我为我的玩家设置了名称、他们的各种准确度,然后通过 getter 显示它们。所有这些都是使用对象向量和迭代器完成的,就像这样:
vector<Player> player(2);
vector<Player>::iterator modIter;
int bAccuracy, sAccuracy;
string playerName;
cout << "Input the name of the players: " << endl;
for (modIter = player.begin(); modIter != player.end(); modIter++)
{
cin >> playerName;
modIter->setName(playerName);
}
cout << "\nSet the players' bull accuracy:" << endl;
for (modIter = player.begin(); modIter != player.end(); modIter++)
{
cout << modIter->getName() << ": ";
cin >> bAccuracy;
modIter->setBullAccuracy(bAccuracy);
}
cout << "\nSet the players' single hit accuracy: " << endl;
for (modIter = player.begin(); modIter != player.end(); modIter++)
{
cout << modIter->getName() << ": ";
cin >> sAccuracy;
modIter->setBullAccuracy(sAccuracy);
}
//display values to check program working well so far
for (modIter = player.begin(); modIter != player.end(); modIter++)
{
cout << modIter->getBullAccuracy() << endl;
cout << modIter->getOuterAccuracy() << endl;
cout << modIter->getSingleAccuracy() << endl;
}
在 运行 代码之后,输入 "Joe" 和 "Sid" 作为名称,71 和 73 分别用于公牛准确度,然后 80 用于两个玩家单次命中准确度,这是我的控制台输出的结果:
输入选手姓名:
乔
席德
设置玩家的公牛精度:
乔:71
Sid: 73 //这意味着至少名称设置正确
设置玩家的单次命中精度:
乔:80
希德:80
//这是奇怪的输出
80 //这应该是71
-842150451 //还有这个80
80 //这里是73
-842150451 //这里又是 80
所以到底发生了什么,因为这是 getters 和 setters 的基本且熟悉的用法,我不知道如何自己调试它,因为我没有看到问题。我的代码中是否有我看不到的东西正在改变结果?
非常感谢您的帮助
当您提示单精度时,您仍在调用 setBullAccuracy
方法,而不是 setSingleAccuracy
。你也没有初始化你的成员变量,这就是为什么打印出 singleAccuracy
给你垃圾。