#include "card.h" Card::Card() : myRank(1), mySuit(Card::spades) { } Card::Card(int rank, Suit s) : myRank(rank), mySuit(s) { } string Card::suitString(Suit s) const { if (s == spades) return "spades"; else if (s == hearts) return "hearts"; else if (s == diamonds) return "diamonds"; else return "clubs"; } string Card::rankString(int r) const // pre: 1 <= r <= 13 { if (1 == r) return "ace"; else if (2 == r) return "two"; else if (3 == r) return "three"; else if (4 == r) return "four"; else if (5 == r) return "five"; else if (6 == r) return "six"; else if (7 == r) return "seven"; else if (8 == r) return "eight"; else if (9 == r) return "nine"; else if (10 == r) return "ten"; else if (11 == r) return "jack"; else if (12 == r) return "queen"; else if (13 == r) return "king"; else return "joker"; } string Card::toString() const { if (1 <= myRank && myRank <= 13) { return rankString(myRank) + " of " + suitString(mySuit); } return "zero of doughnuts"; } bool Card::SameSuitAs(const Card& c) const // post: return true iff mySuit == c.mySuit { return mySuit == c.mySuit; } int Card::GetRank() const { return myRank; } bool Card::IsJoker() const { return myRank < 1 || 13 < myRank; } ostream& operator <<(ostream& out, const Card& c) { out << c.toString(); return out; } bool operator == (const Card& lhs, const Card& rhs) { if (lhs.IsJoker() || rhs.IsJoker()) { return false; } return lhs.GetRank() == rhs.GetRank() && lhs.SameSuitAs(rhs); }