home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
listings
/
v_08_08
/
8n08051a
< prev
next >
Wrap
Text File
|
1990-07-18
|
2KB
|
110 lines
// meal2.cxx - second attempt at pricing a meal
#include <stream.h>
enum ENTREE {Steak,Fish};
enum DESSERT {Pie,Cake,Jello};
enum APPETIZER {Melon,ShrimpCocktail};
class Dessert // An abstract class - never instantiated by itself
{
public:
virtual double cost()
{ printf("Dessert error, no cost() provided\n"); return 0;}
};
class Jello_obj : public Dessert
{
public:
double cost() {return .60;}
};
class Pie_obj : public Dessert
{
public:
double cost() {return 1.50;}
};
class Cake_obj : public Dessert
{
public:
};
class Entree
{
public:
virtual double cost()
{ printf("Entree error, no cost() provided\n"); return 0;}
};
class Fish_obj : public Entree
{
public:
double cost() {return 4.00;}
};
class Steak_obj : public Entree
{
public:
double cost() {return 7.50;}
};
class Appetizer
{
public:
virtual double cost()
{ printf("Appetizer error, no cost() provided\n"); return 0;}
};
class Cocktail_obj : public Appetizer
{
public:
double cost() { return 2.00;}
};
class Melon_obj : public Appetizer
{
public:
double cost() { return .85;}
};
class Meal
{
Appetizer *a;
Entree *e;
Dessert *d;
public:
Meal(APPETIZER=Melon,ENTREE=Fish,DESSERT=Jello);
~Meal();
double cost();
};
//-------------------------------------------
// class member function definitions
double Meal::cost() {return d->cost() + a->cost() + e->cost(); }
Meal::Meal(APPETIZER aval,ENTREE eval,DESSERT dval)
{
if ( dval == Jello ) d = new Jello_obj;
else if ( dval == Pie ) d = new Pie_obj;
else d = new Cake_obj;
if ( eval == Steak ) e = new Steak_obj;
else e = new Fish_obj;
if ( aval == Melon ) a = new Melon_obj;
else a = new Cocktail_obj;
}
Meal::~Meal() { delete a; delete e; delete d; }
//--------------------------------------------
main()
{
Meal m1(Melon,Fish,Jello);
Meal m2(Melon,Steak,Pie);
Meal m3(ShrimpCocktail,Steak,Cake);
printf("Meal1 Price %6.2f, Meal2 price %6.2f, Meal3 price %6.2f\n"
,m1.cost(),m2.cost(),m3.cost());
}
// ---- sample output below -----
Dessert error, no cost() provided
Meal1 Price 5.45, Meal2 price 9.85, Meal3 price 9.50