将卡片的矢量传递给功能以打印和使用?
Pass vector of card into function to print and use?
我正在努力完成一个卡片程序,想将我的单个卡片向量传递到我的函数中以便可以使用它。现在,我只想测试它是否可以打印牌组中的牌,但将它传递到玩家手中是最终目标。传递此向量以在函数中使用的最佳方式是什么?
提前致谢!!
创建牌组的函数:
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;
}
原型已在header中声明如下:
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 的数据字段可能应该是 "private" 并且只能通过适当的访问函数访问。此外 printCard
不需要将 Card 作为输入,因为它在 this
上运行(并且,如果它确实采用了参数,那么简单打印对象的函数应该通过 const ,不是可变引用)。
请参阅 this gist 示例。
我正在努力完成一个卡片程序,想将我的单个卡片向量传递到我的函数中以便可以使用它。现在,我只想测试它是否可以打印牌组中的牌,但将它传递到玩家手中是最终目标。传递此向量以在函数中使用的最佳方式是什么?
提前致谢!!
创建牌组的函数:
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;
}
原型已在header中声明如下:
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 的数据字段可能应该是 "private" 并且只能通过适当的访问函数访问。此外 printCard
不需要将 Card 作为输入,因为它在 this
上运行(并且,如果它确实采用了参数,那么简单打印对象的函数应该通过 const ,不是可变引用)。
请参阅 this gist 示例。