【问题标题】:Pass vector of card into function to print and use?将卡片矢量传递给函数以打印和使用?
【发布时间】:2015-02-19 05:24:26
【问题描述】:

我在卡程序中苦苦挣扎,想将我的单卡向量传递到我的函数中,以便可以使用它。现在,我只想测试它是否可以打印牌组中的牌,但将其传递到玩家手中是最终目标。传递此向量以在函数中使用的最佳方式是什么?

提前致谢!!

创建甲板的功能:

void Deck::createDeck() {
deck.clear();
static const char suits[] = {'C','D','H','S'};
for (int suit=0; suit < 4; suit++)
    for (int val=1; val <=13; val++)
        deck.push_back(Card(val,suits[suit]));
}

将卡片传递给的函数:

void Card::printCard(Card& drawnCard) const { //for debugging purposes
cout << value << " of " << suit << endl;

}

原型已在标题中声明如下:

class Card{
public:
    int value;
    char suit;
    string drawnCard;
    Card(int value, char suit) : value(value), suit(suit) {}
    void printCard(Card& drawnCard) const;
};

class Deck {

public:
    void createDeck();
    void shuffleDeck(Card);
    Card drawRandomCard();
    Deck(); 
    vector<Card> deck;
};

再次感谢!

【问题讨论】:

    标签: c++ vector poker


    【解决方案1】:

    这里有很多要批评的地方。您可能不想直接传递卡片列表,但可能想要传递牌组,例如:

     void DoSomething(const Deck& deck) {
        // ...
     }
    

    但是,假设您确实传递了列表,那么传递它的方式将是一个 const 引用:

    void DoSomething(const std::vector<Card>& cards) {
       // ...
    }
    

    不过,您的示例代码还有许多其他方面可以改进。例如, Card 和 Deck 的数据字段可能应该是“私有的”,并且只能通过适当的访问器函数访问。此外,printCard 不需要将 Card 作为输入,因为它在 this 上运行(并且,如果它确实接受了参数,那么简单打印对象的函数应该通过 const 获取其参数,而不是 mutable参考)。

    有关示例,请参阅 this gist。

    【讨论】:

    • 好的,感谢您的所有建议。因此,使用您的第一个示例,原型是否会放在 Deck 类下并且是 void printCard(const Deck&amp; deck) 那么我的函数是 void Deck::printCard(const Deck&amp; deck) 但我不认为卡片向量中的值现在正在传递,因为我的值和套装是 @987654329 @?谢谢!
    • 不,应该是“void Card::printCard() const”或“void PrintCard(const Card& card)”。但是,如果您有“Card::”作为前缀并且它不是静态的,那么您已经在特定卡的上下文中并且不要将该卡作为参数。
    • 这是原型?我只是对它会在哪里感到困惑,因为我有一个甲板类和一个卡片类。再次感谢。
    • 我想你可能会发现这个说明:gist.github.com/michaelsafyan/0a62e42aa50be661430b
    • 是的,谢谢。这确实有很大帮助。这基本上是我第一次不得不将一堆东西连接在一起,所以我遇到了很多问题,但感谢您发布这个。
    猜你喜欢
    • 2021-02-08
    • 1970-01-01
    • 2012-04-13
    • 2023-02-06
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    • 2020-07-28
    • 2012-01-21
    相关资源
    最近更新 更多