// File: ex7-3.cpp #include #include using namespace std; class Card { private: int value; int suit; public: Card(int n = 0); Card(int val, int s); int get_value() const { return value; } int get_suit() const { return suit; } }; Card::Card(int n) : value(n % 13), suit(n / 13) { } Card::Card(int val, int s) :value (val), suit(s) { } ostream& operator<<(ostream& out, const Card& crd) { const string valueStr[13] = { "two","three","four","five","six","seven", "eight","nine","ten","jack","queen","king","ace" }; const string suitStr[4] = {"clubs","diamonds","hearts","spades"}; out << valueStr[crd.get_value()] << " of " << suitStr[crd.get_suit()]; return out; } class Deck { protected: const int DeckSize; Card* ptrCard; public: Deck(int = 0); ~Deck(); Card* get_ptrCard() const { return ptrCard; } int getDeckSize() const { return DeckSize; } void shuffle(); }; Deck::Deck(int n) : DeckSize(n), ptrCard(new Card[n]) { } Deck::~Deck() { delete [] ptrCard; ptrCard = nullptr; } ostream& operator<<(ostream& out, const Deck& deck) { for (int i = 0; i < deck.getDeckSize(); i++) out << deck.get_ptrCard()[i] << endl; return out; } void Deck::shuffle() { cout << "I am shuffling the Deck\n"; Card temp; for (int i = 0; i < DeckSize; i++) { int k = rand() % DeckSize; temp = ptrCard[i]; ptrCard[i] = ptrCard[k]; ptrCard[k] = temp; } } class PokerDeck : public Deck { public: PokerDeck(); }; PokerDeck::PokerDeck() : Deck(52) { for (int i = 0; i < DeckSize; i++) ptrCard[i] = Card(i); } class PinocleDeck : public Deck { public: PinocleDeck(); }; PinocleDeck::PinocleDeck() : Deck(48) { for (int i = 0; i < DeckSize; i++) ptrCard[i] = Card(i%6+7,i/2%4); } int main() { PokerDeck pokerD; cout << "This is a poker deck\n" << pokerD << endl; PinocleDeck pinocleD; cout << "This is a pinocle deck\n"<< pinocleD << endl; pokerD.shuffle(); pinocleD.shuffle(); }