阅读下列说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内? 【说明】 某饭店在不同的时段提供多种不同的餐饮,其菜单的结构图如图10.41所示。 现在采用组合(Composition)模式来构造该饭店的菜单,使得饭店可以

admin2018-07-25  21

问题 阅读下列说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内?
    【说明】
    某饭店在不同的时段提供多种不同的餐饮,其菜单的结构图如图10.41所示。

    现在采用组合(Composition)模式来构造该饭店的菜单,使得饭店可以方便地在其中添加新的餐饮形式,得到如图10.42所示的类图。其中MenuComponent为抽象类,定义了添加(add)新菜单和打印饭店所有菜单信息(print)的方法接口。类Menu表示饭店提供的每种餐饮形式的菜单,如煎饼屋菜单、咖啡屋菜单等。每种菜单中都可以添加子菜单,例如图10.41中的甜点菜单。类Menultem表示菜单中的菜式。

【C++代码】
#include<iostream>
#include<list>
#include<string>
using namespace std;
class MenuC0mponent{
protected:string name;
public:
    MenuComponent(String name){this->name=name;  }
    sting getName(){return name;}
    _____(1); //添加新菜单
    virtual void print()=0;  //打印菜单信息
};
class MenuItem:public MenuComponent{
private:double price;
public:
    MenuItem(string name,double price):MenuComponent(name){this->price=price;}
    double getPrice(){return price;}
    void add(MenuComponent*menuComponent){return;}  //添加新菜单
    void print()(tout<<’’  ’’>>getName()<<’’,’’<<getPrice<<end1;}

};
Class Menu:public MenuComponent{
private:list<_____(2)>menuComponents;
public:
    Menu(string name):MenuComponent(name){}
    void add(MenuComponent*menuComponent)  //添加新菜单
    {  _____(3);  }
    void print(){
    cout<<’’\n’’<<getName()<<’’\n----------------------------’’<<end1;
    std::list    for(iter=menuComponents.begin();iter!=menuComponents.end();iter++)
    _____(4)->print();
    }
};
void main(){
    MenuComponent*allMenus=new Menu(’’LL MENUS’’);
    MenuC0mponent*dinerMenu=new Menu(’’DINER MENU’’);
    …//创建更多的Menu对象,此处代码省略
    allMenus->add(dinerMenu);  //将dinerMenu添加到餐厅菜单中
    …//为餐厅增加更多的菜单,此处代码省略
    _____(5)->print();//打印饭店所有菜单信息
}

选项

答案(1)virtual void add(MenuComponent*menuComponent)=0 (2)MenuComponent* (3)menuComponents->push_back(menuComponent) (4)(*iter) (5)allMenus

解析 MenuComponent是虚基类,其中要定义添加新菜单纯虚函数,函数体在其派生类Menultem和Menu中实现。空(1)处应填入virtual void add(MenuComponent*menuComponent)=0。
    在类Menu中定义了列表menuComponents,用于保存添加的新菜单,由std::list<MenuComponent*>::iterator iter可知列表的类型为MenuComponent*,故空(2)处应填入MenuComponent*。
    添加菜单时,可以从menuComponents列表的前面添加,也可以从menuComponents列表的后面添加,但通过菜单的输出函数可知,菜单是从列表的后面添加的,因此空(3)处应填入menuComponents->push_back(menuComponent)。
    iter是迭代器,用于遍历菜单列表menuComponents,空(4)处应填A.(*iter)。
    在主函数,打印饭店所有菜单信息的函数调用为allMenus->print()。
转载请注明原文地址:https://kaotiyun.com/show/17DZ777K
0

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