问答题 阅读下列说明和C++代码,将应填入______处的字句写在下面。
[说明]
某咖啡店当卖咖啡时,可以根据顾客的要求在其中加入各种配料,咖啡店会根据所加入的配料来计算费用。咖啡店所供应的咖啡及配料的种类和价格如下表所示。
咖啡 价格/杯(¥) 配料 价格/杯(¥)
蒸馏咖啡(Espresso) 25 摩卡(Mocha) 10
深度烘焙咖啡(DarkRoast) 20 奶泡(Whip) 8
现采用装饰器(Decorator)模式来实现计算费用的功能,得到如下图所示的类图。
【正确答案】
【答案解析】protected virtual string getDescription virtual int cost()=0
Beverage*beverage beverage beverage [解析] 由类图可知,Beverage是基类,Espresso、DarkRoast、CondimentDecorator是Beverage的派生类,Mocha、Whip又是CondimentDecorator的派生类。
第一处应填入description的访问控制类型,可能为private或protected。在Beverage的派生类Espresso的初始化函数中直接使用description,由此可知,在基类中,description的访问控制类型为protected。如果为private,则在派生中不能使用。
在基类中先后动态建立了一个DarkRoast对象、Mocha对象和Whip对象,调用初始化函数,并输出。
在Mocha类和Whip类中分别调用了基类的getDescription()cost()。