ex7-3.cpp - Example 7-3 Inheritance - card and deck classes

// File: ex7-3.cpp

#include <iostream>
#include <cstdlib>
using namespace std;

char* pips_name[13] = {"two","three","four","five","six","seven","eight",
"nine","ten","jack","queen","king","ace"};
char* suit_name[4] = {"clubs","diamonds","hearts","spades"};

class card
{
private:
    int pips;
	int suit;
public:
	card(void) {}
	card(int n) { pips = n % 13; suit  = n / 13; }
	card(int p, int s) { pips = p; suit = s; }
	void print(void) const
	{ cout << pips_name[pips] << " of " << suit_name[suit] << endl; }
};

class deck
{
protected:
	card* d;
	const int num_cards;
public:
	deck(int);
	~deck();
	void shuffle(void);
	void print(void) const;
};

deck::deck(int n) :	num_cards(n)
{
	d = new card[num_cards];
}

deck::~deck()
{
	delete [] d;
}

void deck::print(void) const
{
	for (int i = 0; i < num_cards; i++) d[i].print(); return;
}

void deck::shuffle(void)
{
	cout << "I am shuffling the deck\n";
	card temp;
	for (int i = 0; i < num_cards; i++)
	{
		int k = rand() % num_cards;
		temp = d[i];
		d[i] = d[k];
		d[k] = temp;
	}
	return;
}


class poker_deck : public deck
{
public:
    poker_deck(void);
};

poker_deck::poker_deck(void) : deck(52)
{
	for (int i = 0; i < num_cards; i++) d[i] = card(i);
}

class pinocle_deck : public deck
{
public:
    pinocle_deck(void);
};

pinocle_deck::pinocle_deck(void) : deck(48)
{
	for (int i = 0; i < num_cards; i++) d[i] = card(i%6+7,i/2%4);
}

int main(void)
{
	poker_deck pd;
	pd.print();
	pinocle_deck pin;
	pin.print();
	pin.shuffle();
	pd.shuffle();
	return 0;
}



CIS27: Programming in C++    Instructor: Joe Bentley