首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读下列说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】某发票(Invoice)由抬头(Head)部分、正文部分和脚注(Foot)部分构成。现采用装饰(Decorator)模式实现打印发票的功能,得到如图5-1所示的类图。 【C+
阅读下列说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】某发票(Invoice)由抬头(Head)部分、正文部分和脚注(Foot)部分构成。现采用装饰(Decorator)模式实现打印发票的功能,得到如图5-1所示的类图。 【C+
admin
2017-11-28
23
问题
阅读下列说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】某发票(Invoice)由抬头(Head)部分、正文部分和脚注(Foot)部分构成。现采用装饰(Decorator)模式实现打印发票的功能,得到如图5-1所示的类图。
【C++代码】
#include
using namespace std;
class Invoice{
public:
(1) {
cout<<“This is the content of the invoice!”<
}
};
class Decorator:public Invoice{
Invoice*ticket;
public:
Decorator(Invoice*t) {ticket=t;}
void printInVoice(){
if(ticket!=NULL)
(2);
}
};
class HeadDecorator:public Decorator{
public:
HeadDecorator(Invoice*t):Decorator(t){ }
void printInvoice(){
cout<<“This iS the header of the invoice!”<
(3) ;
}
};
class FootDecorator:public Decorator{
public:
FootDecorator(Invoice*t):Decorator(t){)
void printInvoice(){
(4) ;
cout<<“This is the footnote of the invoice!”<
}
};
int main(void) {
Invoice t;
FootDecorator f(&t);
HeadDecorator h(&f);
h.print工nVoice();
cout<<“一一一一一一一一一一一一一一一一一一一”<
FootDecorator a(NULL);
HeadDecorator b((5));
b.printInVoice();
return 0;
}
程序的输出结果为:
This is the header of the invoice!
This is the content of the invoice!
This is the footnote of the invoice!
……………………
This is the header of the invoice!
This is the footnote of the invoice!
选项
答案
(1)virtual void printlnvoice() (2)ticket一>printlnvoice0 (3)Decorator::printlnvoice() (4)Decorator::printlnvoice() (5)&a
解析
本题考查装饰(Decorator)模式的基本概念和应用。
装饰模式属于结构型设计模式,其设计意图是动态地给一个对象添加一些额外的职责。就增加功能而言,装饰模式比生成子类更加灵活。装饰模式的结构如图5-2所示。
其中:
Component定义一个对象接口,可以给这些对象动态地添加职责。
ConcreteComponent定义一个对象,可以给这个对象添加一些职责。
Decorator维持一个指向Component对象的指针,并定义一个与Component接口一致的接口。
ConcreteDecorator向组件添加职责。
装饰模式适用于:
在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
处理那些可以撤销的职责。
当不能采用生成子类的方式进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是,由于类定义被隐藏,或类定义不能用于生成子类。
本题将装饰模式用于实现打印发票问题。图5.1的类图中,类Invoice对应图5-2中的Component,其功能是打印发票的内容;HeadDecorator和FootDecorator是两个ConcreteDecorator,向组件中添加打印发票抬头和发票脚注的功能。
方法printlnvoice是Invoice中定义的接口,Component类中应定义一个与之一致的接口。在C++中,父类和子类之间共享接口,通常采用虚拟函数。由此可知,空(1)处应填写“virtual void printlnvoice()”。这个接口在类Decorator、HeadDecorator和FootDecorator中分别进行了重置,分别对应代码中的空(2)~(4)。
类Decorator中保持了一个指向Component对象的指针——ticket,用来接收所要装饰的组件Invoice。因此空(2)处应填写“ticket.>printlnvoice0”。类HeadDecorator和FootDecorator是在打印发票内容的基础上,打印发票的抬头和脚注,所以空(3)、(4)处都应填写“Decorator::printlnvoice0”。
最后一空考查的是装饰模式的调用,由main()函数中给出的第一次调用可以获得一些提示,推断出空(5)出应填写“&a”。
转载请注明原文地址:https://kaotiyun.com/show/CKDZ777K
本试题收录于:
软件设计师下午应用技术考试题库软考中级分类
0
软件设计师下午应用技术考试
软考中级
相关试题推荐
阅读以下有关网络规划的叙述,回答问题1、问题2和问题3。网络工程是一项复杂的系统工程,一般可分为网络规划、网络设计、工程实施、系统测试验收和运行维护等几个阶段。网络规划是在需求分析的基础上,进行系统可行性分析和论证,以确定网络总体方案。网络规划阶段
在Internet上捕获并分析图8-16所示的网络中两个内部网络经由Internet通信的L2TPv2数据帧,请从以下4个选项中选择正确的答案填写到图8-17的(1)~(4)空缺处的相应位置。【供选择的答案】A.L2TPv2头
非对称数字用户线(AsymmetricDigitalSubscriberLine,ADSL)是一种利用现有的传统电话线路高速传输数字信息的技术。ADSL技术可以充分利用现有铜线网路,只要在用户线路两端加装ADSL设备即可为用户提供服务。ADSL系统构
非对称数字用户线(AsymmetricDigitalSubscriberLine,ADSL)是一种利用现有的传统电话线路高速传输数字信息的技术。ADSL技术可以充分利用现有铜线网路,只要在用户线路两端加装ADSL设备即可为用户提供服务。ADSL系统构
ISDN分哪几层?NT2(网络终端连接设备)提供哪两种交换功能?请说出(1)的含义。
请用100字以内的文字说明该网管软件项目采用快速原型开发方法的优缺点。在最理想和保守的估计中加速开发进度要着重抓的共同环节是哪些?请用50字以内的文字加以说明。
请用100字以内的文字说明该网管软件项目采用快速原型开发方法的优缺点。请指出图7-15可能存在的关键路径是什么?(请用英文字母序号列出)
阅读以下说明然后完成问题1、问题2、问题3、问题4,把答案填入相应的对应栏内。[说明]如图10-1是Cisco1900交换机划分为两个vain拓扑图,把E0/10划分为vlan2,把E0/20划分为vlan3。[*]
从图7-1中可以看出采用什么拓扑结构与设计方法?在“电视模块”中一般采用75欧的CATV电缆传输模拟信号,如果在“电脑模块”中也要采用75欧的CATV电缆传输信号,该怎么实现?
随机试题
新生儿甲状腺功能减低症筛查的最佳时间是
女,30岁,肛门周围胀痛,伴畏寒、发热3天。检查:肝门周围皮肤发红,压痛明显。最可能的诊断是
A.抬高患肢30度B.头高脚低位C.患侧卧位D.健侧卧位E.俯卧位下肢静脉血栓的病人术后宜取()
血浆制品主要有
臀痈属于中医外科中的
建设工程监理的工作性质有( )特点。
商业票据的特点不包括()。
进行社会服务方案策划时,需要开展问题认识和分析,认识的方法主要有( )。
纵观世界范围内的装饰艺术,每个国家都有其自身传统的经典装饰绘画门类。我们都知道埃及绘画中那________的人物造型和姿态:侧面的头、四肢,正面的身体,还有动物和花卉的形态。在埃及绘画中,没有一样东西使人感觉没有计划,没有一样东西似乎可以挪动位置。就是这种
Theemployeesareanxious,notonlybecausetheymightfindthemselvesoutofajob,butalsobecausetheyhavenogenuinesatis
最新回复
(
0
)