Question:
I have two enumerated types: enum suit_type{club,diamond,heart,spade} and enum rank_type{ace,two,…,queen,king}. In structure CARD, I have the variables suit_type suit and rank_type rank. In class PILE, I have a private variable: CARD storage[MAX_CARD]. I am trying to initialize the deck to 52 cards of spades, hearts, diamonds and clubs. Below is a substandard for-loop.
for(int i=0;iThis for-loop achieves the results, but not in order of suit, then rank. I have tried to construct a for-loop that will do exactly that, but I am having some problems. Answer:
The trick here is to use nested for-loops. Here is an example:class Card{public: enum suit {spade,hearts,diamonds,club,end_suit}; enum rank {ace,one,two,three,four,five,six,seven,eight,nine,ten, jack,queen,king,end_rank}; Card (suit st = end_suit,rank rk=end_rank): suit_(st),rank_(rk) { } const Card &operator = (suit s, rank r) { suit_ = s; rank_ = r; return *this; } rank Rank() const { return rank_;} suit Suit() const { return suit;}private: suit suit_; rank rank_;};class Deck {public: Deck() { for(Card::suit s = spade; s < end_suit; ++s) for(Card::rank r = ace; r < end_rank; ++r) card_[s][r] = Card(s,r); } // ... other methods.. // ...private: Card card_[Card::suit_end][Card::rank_end];};Here I define a two-dimensional array and fill it with data accordingto the suit, rank. I also defined a copy assignment operator for theclass Card so I can write the for-loop more elegantly.Also, class Card needs a default constructor because it will be used in anarray.