Я работаю с карточной программой и хочу передать свой вектор одной карты в свою функцию, чтобы его можно было использовать. Прямо сейчас, я просто хотел бы проверить, может ли он печатать карты из колоды, но передача его в руку игрока является конечной целью. Каков наилучший способ передать этот вектор для использования в функциях?
Заранее спасибо!!
функция для создания колоды:
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
не нужно брать карту в качестве входных данных, так как она работает на this
(и, если он действительно принимает параметр, функция, которая просто печатает объект, должна получить его параметр с помощью const, а не изменяемой ссылки).
Увидеть этот смысл для примера.