问题详情

阅读下列说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。 说明:某饭店在不同的时段提供多种不同的餐饮,其菜单的结构图如图10.41所示。 现在采用组合(Composition)模式来构造该饭店的菜单,使得饭店可以方便地在其中添加新的餐饮形式,得到如图10.42所示的类图。其中MenuComponent为抽象类,定义了添加(add)新菜单和打印饭店所有菜单信息(print)的方法接口。类Menu表示饭店提供的每种餐饮形式的菜单,如煎饼屋菜单、咖啡屋菜单等。每种菜单中都可以添加子菜单,例如图10.41中的甜点菜单。类Menultem表示菜单中的菜式。


时间:2022-03-03 21:17 关键词: 面向对象技术 中级软件设计师

答案解析

<p> (1)virtualvoidadd(MenuComponent*menuComponent)=0<br> (2)MenuComponent*<br> (3)menuComponents-&gt;push_back(menuComponent)<br> (4)(*iter)<br> (5)allMenus</p>
MenuComponent是虚基类,其中要定义添加新菜单纯虚函数,函数体在其派生类Menultem和Menu中实现。空(1)处应填入virtualvoidadd(MenuComponent*menuComponent)=0。在类Menu中定义了列表menuComponents,用于保存添加的新菜单,由std::list::iteratoriter可知列表的类型为MenuComponent*,故空(2)处应填入MenuComponent*。添加菜单时,可以从menuComponents列表的前面添加,也可以从menuComponents列表的后面添加,但通过菜单的输出函数可知,菜单是从列表的后面添加的,因此空(3)处应填入menuComponents->push_back(menuComponent)。iter是迭代器,用于遍历菜单列表menuComponents,空(4)处应填入(*iter)。在主函数,打印饭店所有菜单信息的函数调用为allMenus->print()。