读书人

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

发布时间: 2012-03-09 21:42:54 作者: rapoo

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

读书人网 >C++

热点推荐