【问题标题】:Changing private variable of object in a vector更改向量中对象的私有变量
【发布时间】:2017-10-31 16:33:11
【问题描述】:

我正在尝试更改 Card 类中的 int 变量的值,如下所示:

class Card {
  public:
    enum Suits {diamond, heart, club, spade};
    Card (int _rank, Suits _suit) : rank{_rank}, suit{_suit} {}
    int getRank();
    void changeRank(int change);

  private:
    int rank;
    Suits suit;
};

card.cpp:

int Card::getRank() {
  return rank;
}

void Card::changeRank(int change) {
    rank = change;
}

这是播放器类:

class Player {
  private:
    vector<Card> playerHand;

  public:
    Card getCard(int index);
};

播放器.cpp:

Card Player::getCard(int index) {
    return playerHand[index];
}

这里是实际调用的dealer.cpp文件:

if (oneOrEleven == 11) {
    player.getCard(i).changeRank(11);
    cout << "The ace will have a value of 11" << endl;
}

这段代码调用了“changeRank()”方法,只是没有改变卡片对象中“rank”的值。

我做错了什么?

【问题讨论】:

  • getCard 按值返回,所以你得到的是一个副本。将其更改为通过引用返回。

标签: c++ class return setter


【解决方案1】:

您应该将 Player::getCard 从按值返回更改为按引用返回。例如

Card& Player::getCard(int index) {
    return playerHand[index];
}

否则,您将始终在返回的副本上进行修改,这与向量中的原始元素无关。

【讨论】:

  • 非常感谢
【解决方案2】:

这段代码调用了“changeRank()”方法,只是没有改变 Card 对象中“rank”的值。

将getCard的函数声明改为引用返回,即:

Card& getCard(int index);

您现在的函数声明方式是按值返回一个 Card 对象,而不是按引用。

当您按值返回时,您返回的是对象的副本,而不是实际的对象本身。

【讨论】:

    猜你喜欢
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 2012-01-14
    • 2016-09-08
    相关资源
    最近更新 更多