1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
| #include<iostream> #include<string> using namespace std;
class Beverage{
protected: string description; public: virtual string getCost(){}; virtual string getDescription(){}; };
class MilkTea: public Beverage{ public: string costNum; MilkTea(){ description = "milkTea"; costNum = "¥15"; } string getCost(){ return costNum; } string getDescription(){ return description; } };
class Decorater:public Beverage {
public: Beverage* beverage ; virtual string getCost(){}; virtual string getDescription(){}; Decorater(Beverage* newBeverage){ beverage = newBeverage; } };
class Zhenzhu:public Decorater{ public: string costNum; string description; Zhenzhu(Beverage* newBeverage):Decorater(newBeverage){ costNum = "¥3"; description = " add Zhenzhu"; }; string getCost(){ return beverage->getCost()+"+"+costNum; } string getDescription(){ return beverage->getDescription()+description; }
};
class Yeguo:public Decorater{ public: string costNum; string description; Yeguo(Beverage* newBeverage):Decorater(newBeverage){ costNum = "¥4"; description = " add Yeguo"; }; string getCost(){ return beverage->getCost()+"+"+costNum; } string getDescription(){ return beverage->getDescription()+description; } };
int main(){ Beverage* newMilkTea = new MilkTea; cout<<newMilkTea->getDescription()<<","<<newMilkTea->getCost()<<endl; newMilkTea = new Zhenzhu(newMilkTea); cout<<newMilkTea->getDescription()<<" "<<newMilkTea->getCost()<<endl; newMilkTea = new Yeguo(newMilkTea); cout<<newMilkTea->getDescription()<<" "<<newMilkTea->getCost()<<endl; }
|