首页 > 解决方案 > CardDeck 构造函数

问题描述

我试图用构造函数创建一个类 CardDeckvector<Card> CardDeck

我的卡片类看起来像这样

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 类来构造vector cards内部CardDeck

CardDeck.h 文件:

#include "Card.h"

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

有没有办法像这样Suits循环遍历所有内容Ranks

伪代码:

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

标签: c++classoop

解决方案


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

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.
};

看到图案了吗?由于 an 的基础类型enum是整数,因此您可以使用它int来为构造函数赋值。

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

enum Counter : long long { ... };

推荐阅读