这题我是看了半天没看懂啊...
在下面的C++代码中,类SalesTicket能够完成打印票据正文的功能,类HeadDecorator与FootDecorator分别完成打印票据的台头和脚注的功能。己知该程序运行后的输出结果如下所示,请填补该程序代码中的空缺。
这是票据的台头!
这是票据正文!
这是票据的脚注!
---------------------
这是票据的台头!
这是票据的脚注!
[C++程序代码]
#include <iostream>
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(){
cout < < “这是票据的台头!” < < 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();
}
都被饶湖了,是2006年下半年的程序员考试题目
[解决办法]
//1.virtual void
//2.Decorator(t)
//3.Decorator(t)
//4.&f
//5.&a
#include <iostream>
using namespace std;
class SalesTicket
{
public:
virtual void 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) :Decorator(t) /*(2) */{}
void printTicket()
{
cout < < "这是票据的台头! " < < endl;
Decorator :: printTicket();
}
};
class FootDecorator:public Decorator{
public:
FootDecorator(SalesTicket *t) :Decorator(t)/* (3)*/
{}
void printTicket()
{
Decorator::printTicket();
cout < < "这是票据的脚注! " < < endl;//
}
};
void main (void)
{
SalesTicket t;
FootDecorator f(&t);
HeadDecorator h(&f /*(4)*/ );
h. printTicket();
cout < < "------------------------------ " < < endl;
FootDecorator a(NULL);
HeadDecorator b( &a/*(5)*/);
b .printTicket();
}
[解决办法]
这是一个“装饰模式”,建议去看看 java与模式,虽然语言不一样,但思想一样。