阅读下列函数说明和C++代码,将应填入(n)处的字句写在对应栏内。 [说明] 在销售系统中常常需要打印销售票据,有时需要在一般的票据基础上打印脚注。这样就需要动态地添加一些额外的职责。如下展示了Decorator(修饰)模式。SalesOr

admin2010-12-17  18

问题 阅读下列函数说明和C++代码,将应填入(n)处的字句写在对应栏内。
   [说明]
   在销售系统中常常需要打印销售票据,有时需要在一般的票据基础上打印脚注。这样就需要动态地添加一些额外的职责。如下展示了Decorator(修饰)模式。SalesOrder对象使用一个SalesTicket对象打印销售票据,先打印销售票据内容,然后再打印脚注。图5-1显示了各个类间的关系。以下是C++语言实现,能够正确编译通过。
   [图5-1]
   
   [C++代码]
   class Component{
   public:
     (1)  void prtTicket()=0;
   };
   class SalesTicket:public Component{
   public:
   void prtTicket(){
   cout<<"Sales Ticket!"<<endl;
   }
   };
   class Decorator:public Component{
   public:
   virtual void prtTicket();
   Decorator(Component *myC);
   private:
     (2)  myComp;
   };
   Decorator::Decorator(Component *myC)
   {
   myComp=myC;
   }
   void Decorator::prtTicket()
   {
   myComp->prtTicket();
   }
   class Footer:public Decorator{
   public:
   Footer(Component *myC);
   void prtTicket();
   void prtFooter();
   };
   Footer::Footer(Component *myC):  (3)  {}
   void Footer::prtFooter()
   {
   cout<<"Footer"<<endl;
   }
   void Footer::prtTicket()
   {
     (4) ;
   prtFooter();
   }
   class SalesOrder{
   public:
   void prtTicket();
   };
   void SalesOrder::prtTicket()
   {
   Component *myST;  
   myST=new Footer(  (5)  );
   myST->prtTicket();
   }
(5)

选项

答案new SalesTicket()

解析 由函数prtTicket()结尾的“=0”易知,该函数是纯虚函数,须声明为virtual,故空(1)应填virtual。
   由Decorator构造函数以及类图可知,Decorator包含一个Component对象引用,故空(2)应填Component*。注意是指针。
   函数Footer(Component *myC)是Footer类的构造函数,故空(3)处是对基类的构造,因此空(3)应填Decorator(myC)。
   Footer类的prtTicket()方法是先打印“基本”票据,再打印脚注。因此空(4)是打印“基本”票据,Footer类是Decorator的子类,故应先调用基类的打印方法,在此应填Decorator::prtTicket()。::为域作用符。
   参照Footer类的参照函数,空(5)应为一个Component对象指针,这里是要打印带脚注的票据,故此处应填new SalesTicket()。
转载请注明原文地址:https://kaotiyun.com/show/IqDZ777K
0

相关试题推荐
最新回复(0)