【问题标题】:CardDeck constructor [duplicate]CardDeck 构造函数 [重复]
【发布时间】:2021-05-05 18:32:25
【问题描述】:

我正在尝试使用构造函数 vector<Card> CardDeck 创建一个 CardDeck 类

我的 Card 类看起来像这样

Card.h 文件:

enum Suit{clubs = 0, diamonds, hearts, spades};

enum Rank{two = 2, three, four, five, six, seven, eight,
                nine, ten, jack, queen, king, ace};

class Card{
private:
    Suit s;
    Rank r;
public:
    Card(Suit suit, Rank rank)
        :s{suit}, r{rank} {};
    Suit getSuit() const;
    Rank getRank() const;
    string toString() const;
    string toStringShort() const;
};

我现在想创建一个 CardDeck 类,它将在 CardDeck 内部构造 vector cards

CardDeck.h 文件:

#include "Card.h"

class CardDeck
{
private:
    vector<Card> cards{}; //Where I'm stuck
public:
//...
};

有没有办法像这样循环遍历所有SuitsRanks

伪代码:

for s in Suits:
    for r in Ranks:
        cards.push_back(Card{s, r})

【问题讨论】:

    标签: c++ class oop


    【解决方案1】:

    由于您使用enum,您可以使用整数来完成它,

    for (int i = 0; i < 4; i++)    // Suit
        for(int j = 2; j < 15; j++)    // Rank
            cards.push_back(Card{static_cast<Suit>(i), static_cast<Rank>(j)});
    

    如果您不知道enums 是如何工作的,它们就像 const 整数一样。它们只是有一个名称,可以更容易地访问和使用(如果可能的话,也很安全)。另一个属性是它会随着它的上升而增加价值,

    enum Count {
        Zero,    // Default is 0.
        One,     // Since the before one is 0, this is 1.
        Two,     // Since the before one is 1, this is 2.
        Three    // Since the before one is 2, this is 3.
    };
    

    看到模式了吗?由于enum 的基础类型是整数,您可以使用int 为您的构造函数赋值。

    奖励:您可以像这样声明enums 整数类型,

    enum Counter : long long { ... };
    

    【讨论】:

      猜你喜欢
      • 2012-02-04
      • 2019-03-09
      • 1970-01-01
      • 2018-10-17
      • 1970-01-01
      • 1970-01-01
      • 2015-07-02
      • 1970-01-01
      • 2012-10-26
      相关资源
      最近更新 更多