// 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