UML图
基类:CDrink
#pragma once
#include <string>
class CDrink
{
public:
CDrink(void){};
virtual void getDrinkName()=0;
virtual double getDrinkPrice()=0;
virtual ~CDrink(void){};
};
Tea.h
#pragma once
#include "drink.h"
#include <string>
#include <iostream>
using namespace std;
class CTea :
public CDrink
{
public:
void getDrinkName();
double getDrinkPrice();
CTea(void);
~CTea(void);
};
Tea.cpp
#include "Tea.h"
CTea::CTea(void)
{
}
void CTea::getDrinkName()
{
cout<<"茶";
}
double CTea::getDrinkPrice()
{
double teaPrice = 8;
return teaPrice;
}
CTea::~CTea(void)
{
}
#pragma once
#include "drink.h"
#include <string>
#include <iostream>
using namespace std;
class CCoffee :
public CDrink
{
public:
void getDrinkName();
double getDrinkPrice();
CCoffee(std::string drinkName);
~CCoffee(void);
std::string mDrinkName;
};
Coffee.cpp
#include "Coffee.h"
CCoffee::CCoffee(std::string drinkName):mDrinkName(drinkName)
{
}
void CCoffee::getDrinkName()
{
cout<<mDrinkName<<"咖啡";
}
double CCoffee::getDrinkPrice()
{
double coffeePrice = 10.0;
return coffeePrice;
}
CCoffee::~CCoffee(void)
{
}
DrinkDecorate.h
#pragma once
#include "drink.h"
#include <iostream>
using namespace std;
class CDrinkDecorate :
public CDrink
{
public:
CDrinkDecorate(CDrink *drink);
~CDrinkDecorate(void);
virtual void getDrinkName();
virtual double getDrinkPrice();
protected:
CDrink *mDrink;
};
DrinkDecorate.cpp
#include "DrinkDecorate.h"
CDrinkDecorate::CDrinkDecorate(CDrink *drink):mDrink(drink)
{
}
void CDrinkDecorate::getDrinkName()
{
}
double CDrinkDecorate::getDrinkPrice()
{
return 0;
}
CDrinkDecorate::~CDrinkDecorate(void)
{
}
DrinkDecorateMilk.h
#pragma once
#include "drinkdecorate.h"
#include <iostream>
#include <string>
using namespace std;
class CDrinkDecorateMilk :
public CDrinkDecorate
{
public:
CDrinkDecorateMilk(CDrink *drink);
~CDrinkDecorateMilk(void);
void getDrinkName();
double getDrinkPrice();
};
#include "DrinkDecorateMilk.h"
CDrinkDecorateMilk::CDrinkDecorateMilk(CDrink *drink):CDrinkDecorate(drink)
{
}
void CDrinkDecorateMilk::getDrinkName()
{
if (mDrink)
{
mDrink->getDrinkName();
}
cout<<"加牛奶";
}
double CDrinkDecorateMilk::getDrinkPrice()
{
double total = 6.0;
if (mDrink)
{
total += mDrink->getDrinkPrice();
}
return total;
}
CDrinkDecorateMilk::~CDrinkDecorateMilk(void)
{
}
DrinkDecorateSuger.h
#pragma once
#include "drinkdecorate.h"
#include <string>
using namespace std;
class CDrinkDecorateSuger :
public CDrinkDecorate
{
public:
CDrinkDecorateSuger(CDrink *drink);
~CDrinkDecorateSuger(void);
void getDrinkName();
double getDrinkPrice();
};
DrinkDecorateSuger.cpp
#include "DrinkDecorateSuger.h"
CDrinkDecorateSuger::CDrinkDecorateSuger(CDrink *drink):CDrinkDecorate(drink)
{
}
void CDrinkDecorateSuger::getDrinkName()
{
if (mDrink)
{
mDrink->getDrinkName();
}
cout<<"加糖";
}
double CDrinkDecorateSuger::getDrinkPrice()
{
double total = 4;
if (mDrink)
{
total += mDrink->getDrinkPrice();
}
return total;
}
CDrinkDecorateSuger::~CDrinkDecorateSuger(void)
{
}
main.cpp
#include "Drink.h"
#include "Coffee.h"
#include "Tea.h"
#include "DrinkDecorate.h"
#include "DrinkDecorateMilk.h"
#include "DrinkDecorateSuger.h"
int main()
{
CDrink * drink = new CCoffee("摩卡");
CDrink * coffee = new CDrinkDecorateMilk(drink);
CDrink * ddcoffee = new CDrinkDecorateSuger(coffee);
CDrink * nCoffee = new CDrinkDecorateSuger(ddcoffee);
nCoffee->getDrinkName();
cout<<"费用总计:"<<nCoffee->getDrinkPrice()<<endl;
delete nCoffee;
delete ddcoffee;
delete coffee;
delete drink;
getchar();
}