那些比我更聪明的人的另一个问题是:
我正在尝试创建3个类似于Player类的实例:
Player *player1 = new Player("Aaron",0.3333333);
Player *player2 = new Player("Bob",0.5);
Player *player3 = new Player("Charlie",1);
你可以在下面看到他们的构造函数。这很简单:
Player::Player(string n, double hr)
{
name = n;
hitrate = hr;
}
(假设名称和命中率已正确定义)
现在我的问题是,当我尝试检查每个玩家的名字时,看起来他们都变成了玩家3的别名
//Directly after the player instantiations:
cout << player1->getName() << "\n";
cout << player2->getName() << "\n";
cout << player3->getName() << "\n";
//In the Player.cpp file:
string Player::getName(){
return name;
}
Outputs:
Charlie
Charlie
Charlie
好吧,所以我真的想知道解决这个问题的最佳解决方案,但更重要的是我只想了解它为什么会这样做。这似乎是一件简单的事情(因为我被Java宠坏了)。
另外需要注意的是:这是针对学校作业的,我被告知我必须使用动态分配的对象。
非常感谢,如果有任何需要澄清的话,请告诉我。
编辑:根据需求,以下是完整文件:
#include <iostream>
#include <player.h>
using namespace std;
int main(){
Player *player1 = new Player("Aaron",0.3333333);
Player *player2 = new Player("Bob",0.5);
Player *player3 = new Player("Charlie",1);
cout << player1->getName() << "\n";
cout << player2->getName() << "\n";
cout << player3->getName() << "\n";
return 0;
}
#ifndef PLAYER_H
#define PLAYER_H
#include <string>
using namespace std;
class Player
{
public:
Player(string, double);
string getName();
};
//Player.cpp
#include "Player.h"
string name;
double hitrate;
Player::Player(string n, double hr)
{
name = n;
hr = hitrate;
}
string Player::getName(){
return name;
}
#endif // PLAYER_H
答案 0 :(得分:3)
name和hitrate变量需要在Player类声明中,以便每个对象都有自己独立的副本。
class Player
{
public:
Player(string, double);
string getName();
private:
string name;
double hitrate;
};