试题六
阅读以下说明和C++程序代码,将应填入 (n) 处的字句写在答题纸的对应栏内。
【说明】
在下面的C++代码中,类SalesTicket能够完成打印票据正文的功能,类HeadDec- orator与FootDecorator分别能够完成打印票据的台头和脚注的功能。
已知该程序运行后的输出结果如下所示,请填补该程序代码中的空缺。
这是票据的台头!
这是票据正文!
这是票据的脚注!
---------------
这是票据的台头!
这是票据的脚注!
【C++程序代码】
#include
using namespace std;
class SalesTicket
public:
(1)printTicket() cout << " 是票据正文!" << endl;
class Decorator : public SalesTicket
SalesTicket *ticket;
public:
Decorator(SalesTicket *t) ticket = t;
void printTicket()
if(ticket != NULL)
ticket->printTicket();
;
class HeadDecorator : public Decorator
public:
HeadDecorator(SalesTicket *t): (2)
void printTicket()
sour << "这是票据的台头!" << endl;
Decorator::printTicket();
;
class FootDecorator :public Decorator
public:
FootDecorator(SalesTicket *t):(3)
void printTicket()
Decorator::printTicket();
cout << "这是票据的脚注!" << endl;
;
void main(void)
SalesTicket t;
FootDecorator f(&t);
HeadDecorator h( (4) );
h.printTicket();
cout << "-------------------------"<< endl;
FootDecorator a(NULL);
HeadDecorator b( (5) );
b.printTicket();
参考答案:(1)virtual void
(2)Decorator(t)
(3)Decorator(t)
(4)&f
(5)&a
解析:
[分析]: 试题六
本题实际上使用了设计模式中的Decorator模式。
从代码可以分析得出,类SalesTicket完成了票据正文的输出,FootDceorator和 HeadDecorator类都继承了Decorator,Decorator继承SalesTicket,FootDecorator和HeadDe- corator类在构造函数的时候都需要对其父类进行初始化,因此,空(2)和(3)应为 Decorator(t);这些类中都具有printTicket方法,根据SalesTicket类中方法的定义可以得出,此方法的返回值为void类型,分析主程序中h.printTicket()可以输出“这是票据的台头!这是票据正文!这是票据的脚注!”的结果,并且考虑到h.printTieket()的执行路径为先执行cout<<"这是票据的台头!"<