如何在c ++中使用另一个类成员变量?

时间:2011-01-06 00:27:24

标签: c++ class

我正在编写一个Yahtzee游戏,我的一些课程遇到了麻烦

我有两个课程,播放器和记分卡。

class Player {
  private:
    string name;
    Scorecard scorecard;
};


class Scorecard {
  public:
    void display() {
      //...
    }
};

(所有类都有适当的getter和setter)

我希望记分卡类能够向用户显示玩家的名字。有什么方法可以做到吗?

6 个答案:

答案 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)

有几种选择。

  1. 将名称作为参数传递给display()函数。 (您正在display()的成员函数中调用Player,对吗?如果没有,您还需要向Player添加公共访问器方法以获取其名称。)< / p>

  2. 将对{ow} Player对象的引用传递给Scorecard对象(例如通过构造函数)并将其存储在Scorecard中。添加公共访问者menthod到Player以获取其名称。

  3. 就个人而言,我更喜欢(1),因为它允许最小化PlayerScorecard类之间的依赖关系。

答案 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;
};