在向量中更改对象的私有变量

时间:2017-05-31 03:30:07

标签: c++ class return setter

我正在尝试更改下面显示的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;
}

这是Player类:

class Player {
  private:
    vector<Card> playerHand;

  public:
    Card getCard(int index);
};

player.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()”,它只是不改变Card对象中“rank”的值。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

您应该将Player::getCard从按值返回更改为按引用返回。 e.g。

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

但是,你总是会修改返回的副本,这与向量中的原始元素无关。

答案 1 :(得分:1)

  

此代码调用方法&#34; changeRank()&#34;,它只是不改变   &#34; rank&#34;的价值在卡片对象中。

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

Card& getCard(int index);

现在您的功能声明的方式是,它返回一个Card对象按值,而不是通过引用。

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