(2012年上半年下午试题五)阅读下列说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 某咖啡店卖咖啡时,可以根据顾客的要求在其中加入各种配料,咖啡店会根据所加入的配料来计算费用。咖啡店所供应的咖啡及配料的种类和价格

admin2018-07-27  15

问题 (2012年上半年下午试题五)阅读下列说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。
    【说明】
    某咖啡店卖咖啡时,可以根据顾客的要求在其中加入各种配料,咖啡店会根据所加入的配料来计算费用。咖啡店所供应的咖啡及配料的种类和价格如表10.9所示。

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

【C++代码】
#include<iostream>
#include<string>
using namespace std;
const int ESPRESSO_PRICE=25;
const int DRAKROAST_PRICE=20 ;
const int MOCHA_PRICE=10;
const int WHIP_PRICE8;
class Beverage{//饮料
    ______(1):  string  description;
public:
    ______(2)(){  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 PRICE+beVerage->cost();  }
};
class Whip  :public CondimentDecorator  {//奶泡
public:
    Whip(Beverage*beverage){this->beverage=beverage;}
    string getDescription()  {return beverage->getDescription()+’’,Whip’’;  }
    int  cost()  (  return WHIP PRICE+beverage->cost(); }
};
int msin()  {
    Beverage*beverage=new DarkRoast();
    beVerage=new Mocha(______(5));
    beVerage=new Whip( ______(6));
    cout<<beverage->getDescription()<<’’¥’’<<beverage->cost()<<end1;
    return 0;
}
编译运行上述程序,其输出结果为:
DarkRoast,Mocha,Whip,¥38

选项

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

解析 由类图可知,Beverage是基类,Espresso、DarkRoast、CondimentDecorator是Beverage的派生类,Mocha、Whip又是CondimentDecorator的派生类。
    空(1)处应填入description的访问控制类型,可能为private或protected。在Beverage的派生类Espresso的初始化函数中直接使用了description,由此可知,在基类中,description的访问控制类型为protected。如果为private,则在派生中不能使用。
    在基类中先后动态建立了一个DarkRoast对象、Mocha对象和Whip对象,调用初始化函数,输出在Mocha类和Whip类中分别调用了基类的getDescription()和cost()。
    空(2)处和空(3)处考查构造函数的定义。从空(2)处构造函数体中返回值的类型及后续的子类继承程序可知,空(2)处应填入virtual string getDescription;从public int cost() {retum ESPRESSO_PRICE;}可以看出,cost()函数的返回值为常量,因此空(3)处应填入virtual int cost()。
    空(4)处考查对CondimentDecorator的定义,在该类中声明一类成员变量,并在this->beverage=beverage和retum beverage->getDescription()+’’,Mocha’’中加以使用。因此空(4)处应填入Beverage*beverage。
    空(5)处和空(6)处考查实例化类模板的方法。类模板必须在实例化后才能使用。实例化类模板时,要给出类型实参。从类图可知,空(5)处和空(6)处均应填入beverage。
转载请注明原文地址:https://kaotiyun.com/show/O7DZ777K
0

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