A hardware store
The program determines the price of various configurations of a computer. Two selections must be made when configuring a computer: one for an expansion card and an other for monitor. The slot for an expansion card must contain one of the three options:
Questions:
In reading the program, think about how it may be simplified. Write your own version, compile, and run it. What you gain and what you loose with the new version?
#include <iostream> using namespace std; enum CARD {CDROM, TAPE, NETWORK }; enum MONITOR { MONO, COLOR }; class Card { public: virtual int price() = 0; virtual char *name() = 0; virtual int rebate(); }; class Network : public Card { public: int price(); char *name(); }; class Tape : public Card { public: int price(); char *name(); }; class CDRom : public Card { public: int price(); char *name(); int rebate(); }; class Monitor { public: virtual int price() = 0; virtual char *name() = 0; }; class Color : public Monitor { public: int price(); char *name(); }; class Monochrome : public Monitor { public: int price(); char *name(); }; int Card::rebate() { return 45; } int Network::price() { return 600; } char *Network::name() { return "Network"; } int CDRom::price() { return 1500; } char *CDRom::name() { return "CDRom"; } int CDRom::rebate() { return 135; } int Tape::price() { return 1000; } char *Tape::name() { return "Tape"; } int Color::price() { return 1500; } char *Color::name() { return "Color"; } int Monochrome::price() { return 500; } char *Monochrome::name() { return "Mono"; } class Computer { public: Computer( CARD, MONITOR ); ~Computer(); int netPrice(); void print(); private: Card *card; Monitor *mon; }; Computer::Computer( CARD c, MONITOR m ) { switch( c ) { case NETWORK: card = new Network; break; case CDROM: card = new CDRom; break; case TAPE: card = new Tape; break; } switch( m ) { case MONO: mon = new Monochrome; break; case COLOR: mon = new Color; break; } } Computer::~Computer() { delete card; delete mon; } int Computer::netPrice() { return mon->price() + card->price() - card->rebate(); } void Computer::print() { cout << "Configuration = " << card->name() << ", " << mon->name() << ", net price = " << netPrice() << endl; } int main() { Computer nm( NETWORK, MONO ); Computer cm( CDROM, MONO ); Computer tm( TAPE, MONO ); Computer nc( NETWORK, COLOR ); Computer cc( CDROM, COLOR ); Computer tc( TAPE, COLOR ); nm.print(); cm.print(); tm.print(); nc.print(); cc.print(); tc.print(); return 0; }