将卡片的矢量传递到函数中进行打印和使用

Pass vector of card into function to print and use?

本文关键字:打印 函数      更新时间:2023-10-16

我在卡程序中很吃力,想把我的单卡向量传递到我的函数中,这样它就可以使用了。现在,我只想测试一下它是否可以从牌组中打印卡片,但将其传给玩家手中是最终目标。传递这个向量以用于函数的最佳方式是什么?

提前感谢!!

创建甲板的功能:

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

再次感谢!

这里有很多需要批评的地方。你可能不想直接通过卡片列表,但可能想通过牌组,比如:

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

然而,假设您确实传递了列表,传递它的方式将是作为常量引用:

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

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

请参阅此要点以获取示例。