阅读以下说明和C++程序代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 在下面的C++代码中,类SalesTicket能够完成打印票据正文的功能,类HeadDec- orator与FootDecorator分别能够完成打印票据的台头和脚

admin2008-05-15  27

问题 阅读以下说明和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<<"这是票据的台头!"<
转载请注明原文地址:https://jikaoti.com/ti/xZW7FFFM
0

最新回复(0)