--以下是一个初学者的自我表白,有些错误请大家指出来啊。
#include<iostream>
#include<string>
using namespace std;
// 抽象的饮料
class Beverage {
public:
virtual string description() = 0; // 返回描述
virtual float cost() = 0; // 返回价格
};
class HouseBlend : public Beverage {
public:
string description() { return "混合咖啡"; }
float cost() { return 2.0; }
};
class Espresso : public Beverage {
public:
string description() { return "意大利浓咖啡"; }
float cost() { return 3.0; }
};
// 抽象调料
class Decorator : public Beverage {
protected://m
Beverage * mb;//*
public:
Decorator(Beverage * bb) : mb(bb) {}
};
// 具体的调料:牛奶
class Milk : public Decorator {
public:
Milk(Beverage * bb) : Decorator(bb) {}
string description() {
string str = mb->description();
str += " 牛奶";
return str;
}
float cost() {
return mb->cost() + 0.5;
}
};
class Mocha : public Decorator {
public:
Mocha(Beverage * bb) : Decorator(bb) {}
string description() {
string str = mb->description();
str += " 摩卡";
return str;
}
float cost() {
return mb->cost() + 0.7;
}
};
int main( )
{
Decorator * d = new Milk(new Espresso);
d = new Mocha(d);
d = new Milk(d);
cout << d->description() << ":" << d->cost() << endl;
system("pause");
return 0;
}