首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读下列说明和C++代码,将应填入(n)处的字句写在对应栏内。 [说明] 某饭店在不同的时段提供多种不同的餐饮,其菜单的结构图如图5-1所示。 现在采用组合(Composition)模式来构造该饭店的菜单,使得饭店可以方便地在其中增加新的
阅读下列说明和C++代码,将应填入(n)处的字句写在对应栏内。 [说明] 某饭店在不同的时段提供多种不同的餐饮,其菜单的结构图如图5-1所示。 现在采用组合(Composition)模式来构造该饭店的菜单,使得饭店可以方便地在其中增加新的
admin
2012-03-21
62
问题
阅读下列说明和C++代码,将应填入(n)处的字句写在对应栏内。
[说明]
某饭店在不同的时段提供多种不同的餐饮,其菜单的结构图如图5-1所示。
现在采用组合(Composition)模式来构造该饭店的菜单,使得饭店可以方便地在其中增加新的餐饮形式,得到如图5-2所示的类图。其中MenuComponent为抽象类,定义了添加(add)新菜单和打印饭店所有菜单信息(print)的方法接口。类Menu表示饭店提供的每种餐饮形式的菜单,如煎饼屋菜单、咖啡屋菜单等。每种菜单中都可以添加子菜单,例如图5-1中的甜点菜单。类MenuItem表示菜单中的菜式。
[C++代码]
#include<iostream>
#include<list>
#include<string>
using namespace std;
clas s MenuComponent {
protected: string name;
public:
MenuComponent(string name) {this->name=name; }
String getName(){return name;}
(1) : //添加新菜单
virtual void print()=0; //打印菜单信息
};
clasS MenuItem: public MenuComponent {
private: double price;
public:
Menultem(string name, double price): MenuComponent(name){this->price=price;}
double getPrice(){return price;}
void add(MenuComponent* menuComponent) {return; } //添加新菜单
void print() { cout<<" "<<getName()<<", "<<getPrice()<<end1;}
};
clasS Menu: public MenuComponent {
private: list< (2) > menuComponents;
pubiic:
Menu(string name): MenuC0mponent(name){}
void add(MenuComponent* menuComponent) //添加新菜单
{ (3) ; }
void print(){
cout<<"\n"<<getName()<<"\n-------------------------"<<end1;
std::list<MenuC0mponent*>::iterator iter;
for(iter=menuComponents.begin(); iter!=menuComponents. end(); iter++)
(4) ->print();
}
};
void main(){
MenuComponent* allMenus=new Menu("ALL MENUS");
MenuComponent* dinerMenu=new Menu("DINER MENU");
…//创建更多的Menu对象,此处代码省略
allMenus->add(dinerMenu); //将dinerMenu添加到餐厅菜单中
…//为餐厅增加更多的菜单,此处代码省略
(5) ->print(); //打印饭店所有菜单的信息
}
(5)
选项
答案
allMonus
解析
Composite模式将对象组合成树形结构以表示“整体-部分”的层次结构,其中的组合对象使得你可以组合基元对象以及其他的组合对象,从而形成任意复杂的结构。Composite模式使得用户对单个对象和组合对象的使用具有一致性。
Composite模式的结构下图所示。
其中:
·类Component为组合中的对象声明接口,在适当的情况下,实现所有类共有接口的缺省行为,声明一个接口用于访问和管理Component的子部件;
·类Leaf在组合中表示叶节点对象,叶节点没有子节点;并在组合中定义图元对象的行为;
·类Composite定义有子部件的那些部件的行为,存储子部件,并在Component接口中实现与子部件有关的操作;
·类Client通过Component接口操纵组合部件的对象。
下列情况可以使用Composite模式:
(1)表示对象的整体.部分层次结构;
(2)希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
试题五将组合模式应用到饭店菜单的构造中。图5-2中的类MenuComponent对应上图中的Component,MenuItem对应Leaf,Menu对应Composite。在实现时,通常都会把Component定义为抽象类。
在C++中,抽象类是指至少包含一个纯虚拟函数的类。类MenuComponent中已经包含了一个纯虚拟函数print,所以MenuComponent已经是一个抽象类了。(1)处根据注释,这里应该定义功能为“添加新菜单”的成员函数。在子类MenuItem和Menu中可以看到,都有add成员函数,说明子类中重置了父类中的成员函数。所以(1)处的成员函数也应该定义为纯虚拟函数,即virtual、void add(MenuComponent* menuComponent)=0。
由图5-2可以看出,Menu中包含了MenuComponent,的对象集合。程序中用C++标准模板库中的list来实现这个聚集关系。因此(2)处应填入MenuComponent*。由于使用了list,就可以利用list中提供的各种方法了。list中用于添加元素的方法是push_back所以(3)处应填入menuComponents.push_back(menuComponent)。
(4)处出现在方法print中,其功能是打印出所有菜单的信息。这里使用了list中的迭代器类iterator,遍历每个子菜单,并调用子菜单中定义的print方法打印该子菜单的信息。(4)处应填入*iter。
为了能够在main中打印出所有的菜单信息,必须使用表示菜单结构中最顶层菜单的对象来调用print,因此(5)处应填入allMenus。
转载请注明原文地址:https://www.kaotiyun.com/show/alDZ777K
本试题收录于:
软件设计师下午应用技术考试题库软考中级分类
0
软件设计师下午应用技术考试
软考中级
相关试题推荐
在开发一个字处理软件时,首先快速发布了一个提供基本文件管理、编辑和文档生成功能的版本,接着发布提供更完善的编辑和文档生成功能的版本,最后发布提供拼写和语法检查功能的版本,这里采用了()过程模型。
程序运行过程中常使用参数在函数(过程)间传递信息,引用调用传递的是实参的()。
设数组a[1..n,1..m](n>1,m>1)中的元素以行为主序存放,每个元素占用1个存储单元,则数组元素a[i,j](1≤i≤n,1≤j≤m)相对于数组空间首地址的偏移量为()。
系统功能测试过程中,验证需求可以正确实现的测试用例称为(32)。
正确的集成测试描述包括(43)。①集成测试也叫做组装测试,通常是在单元测试的基础上,将模块按照设计说明书要求进行组装和测试的过程②自顶向下的增殖方式是集成测试的一种组装方式,它能较早地验证主要的控制和判断点,对于输入输出模块、复杂算法模
下图是①设计模式的类图,该设计模式的目的是②,图中,Abstraction和RefinedAbstraction之间是③关系,Abstraction和Implementor之间是④关系。④处应填入?
下图是①设计模式的类图,该设计模式的目的是②,图中,Abstraction和RefinedAbstraction之间是③关系,Abstraction和Implementor之间是④关系。③处应填入?
下图是①设计模式的类图,该设计模式的目的是②,图中,Abstraction和RefinedAbstraction之间是③关系,Abstraction和Implementor之间是④关系。①处应填入?
用边界值分析法,假定X为整数,10≤X≤100,那么X在测试中应该取(40)边界值。
“<titlestyle="italic">science</title>”是XML中一个元素的定义,其中元素的内容是(29)。
随机试题
下面关于多媒体系统的描述中,不正确的是
A.混浊尿,加酸后澄清,无气泡产生B.混浊尿,加酸后澄清,产生气泡C.混浊尿,加碱后澄清D.混浊尿,加酸后不澄清,产生气泡E.混浊尿,加酸后无变化脓尿表现为
患者男性,82岁。肺心病,近半个月来咳嗽、咳痰,今晨呼吸困难加重,神志恍惚,烦躁不安。查体:体温36.4℃,脉搏120次/分,血压130/80mmHg,呼吸38次/分,口唇发绀,两肺底闻及湿啰音。患者最可能出现的并发症是
在用超声洁牙机行龈上沽治时,丁作头的前端部分与牙面以__________度的角成__________接触。
倡导性规划是在()引导下形成的。
贝克莱把世界上的一切事物都看做是“观念的集合”。从认识论的角度上看,其本质上是
(1)在名称为Form1的窗体上添加一个名称为L1,标题为“业余爱好”的标签,再添加一个名称为Ch1的复选框数组,含3个复选框,它们的Index属性分别为0、1、2,标题依次为“体育”、“音乐”、“美术”,清设置复选框的属性,使其初始状态如下表所示。
A、 B、 C、 C
Evenplantscanrunafever,especiallywhentheyareunderattackbyinsectsordisease.But【71】humans,plantscanhavetheirt
A、TheattackofIslamistterrorists.B、Indonesiahadbeenonhighalert.C、FiveJakartaattackersinIndonesia.D、Allattackers
最新回复
(
0
)