#include #include // needed for rand() function #include using namespace std; const unsigned short DeckSize = 52; class Card { public: enum suitType { clubs, diamonds, hearts, spades }; static const string value_name[13]; static const string suit_name[4]; Card (); Card (int); int get_value(void) const { return value; } suitType get_suit(void) const { return suit; } private: int value; suitType suit; static int default_card_initializer; }; int Card::default_card_initializer = 0; const string Card::value_name[13] = { "two","three","four","five","six","seven", "eight","nine","ten","jack","queen","king","ace" }; const string Card::suit_name[4] = {"clubs","diamonds","hearts","spades"}; Card::Card() : value(default_card_initializer % 13), suit(static_cast(default_card_initializer % 4)) { ++default_card_initializer; } Card::Card(int x) : value(x % 13), suit(static_cast(x % 4)) {} ostream& operator<<(ostream& out, const Card& card) { out << (Card::value_name[card.get_value()]) << " of " << (Card::suit_name[card.get_suit()]); return out; } class Deck { public: Deck(); const Card* get_card() const { return card; } Card get_card(int index) const { return card[index]; } private: Card card[DeckSize]; void shuffle(); friend ostream& operator<<(ostream& out, const Deck& deck); }; Deck::Deck() { shuffle(); } void Deck::shuffle() { int k; Card temp; cout << "I am shuffling the Deck\n"; for (int i = 0; i < DeckSize; i++) { k = rand() % DeckSize; temp = card[i]; card[i] = card[k]; card[k] = temp; } } ostream& operator<<(ostream& out, const Deck& deck) { for (Card c : deck.card) // range-based for loop out << c << endl; return out; } int main(void) { Deck poker; cout << poker << endl; }