首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

这题小弟我是看了半天没看懂啊

2012-03-09 
这题我是看了半天没看懂啊...在下面的C++代码中,类SalesTicket能够完成打印票据正文的功能,类HeadDecorato

这题我是看了半天没看懂啊...
在下面的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与模式,虽然语言不一样,但思想一样。

热点排行