问题 问答题 案例分析题

阅读下列说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。

说明:某饭店在不同的时段提供多种不同的餐饮,其菜单的结构图如图10.41所示。

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

c++代码如下:

答案

参考答案:

(1)virtualvoidadd(MenuComponent*menuComponent)=0

(2)MenuComponent*

(3)menuComponents->push_back(menuComponent)

(4)(*iter)

(5)allMenus

解析: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()。

实验题

(10分)请你参与下列探究:

[问题情景]某化学实验小组同学将铁粉投入硫酸铜溶液中,发现生成红色固体物质的同时有较多的气泡放出。同学们都能解释红色固体物质的出现,请你写出生成红色固体物质的化学反应方程式           。但却对气体的生成产生了疑问,这激发了同学们强烈的探究欲望,生成的是什么气体?

[提出猜想]从物质组成元素的角度,放出的气体可能是O2、SO2、H2

[查阅资料]SO2易溶于水,它能与过量的NaOH溶液反应,生成Na2SO3

[方案设计]依据上述猜想,实验小组同学分别设计了如下方案:

(1)甲同学认为是O2,则较简单的检验方法是                                  

(2)乙同学认为是SO2,则只需将放出的气体通入盛有NaOH溶液的洗气瓶中,称量通气前后洗气瓶的质量。写出SO2与过量的NaOH溶液反应的化学方程式                  

(3)甲、乙同学实验的结果表明气体中既不含O2也不含SO2。丙同学根据以上实验结果推测气体是H2

[实验探究]丙同学为了检验H2,收集了一试管气体,用拇指堵住试管口且管口略向下倾斜靠近火焰移开拇指点火,听到很小的声音。然后再将气体用带尖嘴的导管导出点燃且用冷而干燥的烧杯罩在火焰上方,气体在空气中安静的燃烧,产生淡蓝色火焰,烧杯壁上有水珠生成,接触烧杯的手能感觉到发热。

结论:铁粉与硫酸铜的溶液反应时,产生的气体是          

[思维拓展]由上述实验可以推出,硫酸铜溶液中可能含有           物质。

多项选择题