我正在编写一个Yahtzee游戏,我的一些课程遇到了麻烦
我有两个课程,播放器和记分卡。
class Player {
private:
string name;
Scorecard scorecard;
};
class Scorecard {
public:
void display() {
//...
}
};
(所有类都有适当的getter和setter)
我希望记分卡类能够向用户显示玩家的名字。有什么方法可以做到吗?
答案 0 :(得分:5)
我不会让记分卡打印出玩家的名字。玩家拥有一张记分卡。记分卡没有玩家。
Player类应该有一个display
方法,显示玩家的名字,然后是记分卡:
class Player
{
private:
string name;
Scorecard scorecard;
public:
void display(void)
{
cout << "Player name: " << name << endl;
scorecard.display();
}
};
此外,由于Player包含记分卡,您应该在类Player:
之前声明记分卡类class Scorecard
{
/*... */
};
class Player
{
/* ... */
};
答案 1 :(得分:1)
你必须以某种方式给记分卡作为玩家的实例。此外,播放器需要公开获取者或公开name
。
答案 2 :(得分:0)
最好的方法是向Player添加一个公共访问器方法,该方法返回对Player :: name的复制或常量引用。
答案 3 :(得分:0)
有几种选择。
将名称作为参数传递给display()
函数。 (您正在display()
的成员函数中调用Player
,对吗?如果没有,您还需要向Player
添加公共访问器方法以获取其名称。)< / p>
将对{ow} Player
对象的引用传递给Scorecard
对象(例如通过构造函数)并将其存储在Scorecard
中。添加公共访问者menthod到Player
以获取其名称。
就个人而言,我更喜欢(1),因为它允许最小化Player
和Scorecard
类之间的依赖关系。
答案 4 :(得分:0)
您可以将PlayerName属性添加到记分卡,然后它就可以存储名称。 然后display()函数将名称作为参数
答案 5 :(得分:0)
通常,我会告诉Scorecard
关于拥有它的Player
:
class Scorecard;
class Player {
public:
explicit Player(const string& name_): name(name_), scorecard(*this) {}
const string& Name(oid) const { return name; }
private:
string name;
Scorecard scorecard;
};
class Scorecard {
public:
Scorecard(Player& player_): player(player_) {}
void display() {
cout << player.Name() << endl;
//...
}
private:
Player& player;
};