Еще один вопрос для тех, кто намного мудрее меня:
Я пытаюсь создать 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;
}
(просто предположите, что имя и хитрейт определены правильно)
Теперь моя проблема в том, что, когда я пытаюсь проверить каждого игрока по имени, кажется, что все они стали своего рода псевдонимами для player3
//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
Переменные name и hitrate должны быть внутри объявления класса Player, чтобы каждый объект получал свои собственные отдельные копии.
class Player
{
public:
Player(string, double);
string getName();
private:
string name;
double hitrate;
};
Других решений пока нет …