某咖啡店当卖咖啡时,可以根据顾客的要求在其中加入各种配料,咖啡店会根据所加入的配料来计算费用。咖啡店所供应的咖啡及配料的种类和价格如表16-1所示。 现采用装饰器(Decorator)模式来实现计算费用的功能,得到如图16-4所示的类图。 【C++代码

admin2017-08-31  44

问题 某咖啡店当卖咖啡时,可以根据顾客的要求在其中加入各种配料,咖啡店会根据所加入的配料来计算费用。咖啡店所供应的咖啡及配料的种类和价格如表16-1所示。

现采用装饰器(Decorator)模式来实现计算费用的功能,得到如图16-4所示的类图。

【C++代码】
#include
#include
US ing namespace std;
const int ESPRESSO PRICE=2 5;
const int DRAKROAST PRICE=20;
const int MOCHA PRICE=10;
const int WHIP PRICE=8;
class Beverage{    //饮料
(1)  :string description;
public;
(2)  ()f return description;)
    (3);
  };
  class condimentDecorator  :public Beverage  {//配料
  protected:
  (4);
};
class Espresso:public Beverage{    //蒸馏咖啡
public:
    Espresso  (  )  {description=“Espresso”;}
    int cost(){return ESPRESSO—PRICE;}
};
class DarkRoast:public Beverage{    //深度烘焙咖啡
public:
DarkRoast(  ){  description=“DardRoast”;  )
    int cost(){return DRAKROAST—PRICE;}
    };
class Mocha  :public condimentDecorator  {//摩卡
public:
Mocha(Beverage*beverage)  {this一>beverage=beVerage;}
string getDescription(){return beverage一>getDescription()+”,Mocha”;}
    int cost(  ){  return MOCHA PR工CE+beVerage一>COSt();}
    };
class Whip  :public condimentDecorator  {  //奶泡
public:
Whip(Beverage*beVerage){this一>beVerage=beVerage;  }
string getDescription()  {return beverage一>getDescription(  )+“,Whip”;  }
    int cost()  {  return WHI P PRICE+beVerage一>cost(  );  )
    };
    int meln()  {
    Beverage*beverage=new DarkRoast();
    beverage=new Mocha( (5)   );
    beverage=new Whip((6));
    cout<getDescription  ()<<”¥”<cost()  endl;
    return 0;
    }
    编译运行上述程序,其输出结果为:
    DarkRoast,Mocha,Whip Y38

选项

答案(1)protected (2)virtual string getDescription (3)virtual int cost0=0 (4)Beverage*beverage (5)beverage (6)beverage

解析 本题考查了C++语言的应用能力和装饰设计模式的应用。
第(1)空很明显,是要说明属性description在类Beverage中的类型,应该是私有的、受保护的或公有的,从后面的程序可以看出,子类中继承使用了该属性,因此这里只能定义为受保护的,因此第(1)空的答案为protected。
    第(2)空处也很明显,是要给出一个函数的定义,并且该函数的函数体是“returndescription;99 9从子类奶泡和摩卡中不难发现这个函数应该是getDescription,因此本空的答案为virtual string getDescription。
    第(3)空需要结合后面各子类才能发现,在Beverage中还应该定义一个函数cost,而这个函数在Beverage中并没有实现,因此要定义为纯虚函数,所以第(3)空的答案为virtual int cost()=0。
第(4)空在类CondimentDecorator中,且是该类唯一的一条语句,而它的子类分别是奶泡和摩卡,在奶泡和摩卡这两个类中,都用到了Beverage*beverage,而在使用之前并没有说明,因此这就可以说明,Beverage*beverage是在父类CondimentDecorator中定义的,子类直接继承使用,因此第(4)空的答案为Beverage*beverage。
第(5)和第(6)空在主函数当中,其中第(5)空是要创建一个Mocha对象,应该调用的是类Mocha的构造函数。从类Mocha中,可以看出,其构造函数Mocha的参数是一个Beverage类型的对象指针,而在主函数中,开始就定义了一个Beverage类型的对象指针beverage,因此这里只需填写beverage即可。同理第(6)空的答案也是beverage。
转载请注明原文地址:https://kaotiyun.com/show/4ODZ777K
0

相关试题推荐
最新回复(0)