私よりもはるかに賢い人たちへの別の質問:
次のように Player クラスの 3 つのインスタンスを作成しようとしています。
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に甘やかされています)。
また、これは学校の課題のためのものであり、動的に割り当てられたオブジェクトを使用する必要があると言われました。
どうもありがとうございました。明確にする必要がある場合はお知らせください。
編集:必要に応じて、ここに完全なファイルがあります:
PlayerTest.cpp
#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;
}
Player.h
#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