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

admin2014-10-11  31

问题 阅读下列函数说明和C++代码,将应填入(n)处的字句写在答题纸对应栏内。
【说明】
在销售系统中常常需要扣印销售票据,有时需要在一般的票据基础上打印脚注。这样就需要动态地添加一些额外的职责。如下展示了Decorator(修饰)模式。Salesorder对象使用一个SalesTicket对象打印销售票据,先打印销售票据内容,然后再打印脚注。图5—1显示了各个类间的关系。以F是C++语言实现,能够正确编译通过。
【图5—1】

【C++代码】
C1ass Component{
publiC:
(1)  VOid prtTicket()=0;
};
class SalesTicket:publiC Component{
publiC:
void prtTicket(){
cout<<”Sales Ticket!”<}
};
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();
V0id prtF00ter();
};
F00ter::Footer(Component*myC)  :    (3)  (}
void FOoter::prtF00ter()
{
cout<<“F00ter”<}
Void Footer::prtTicket()
{
(4);
prtFooter();
}
class Sa⊥esorder{
public:
void prtTicket();
};
void Salesorder::prtTicket()
{
C0mponent *myST;
myST=new F00ter(  (5));
myST一>prtTicket();
}

选项

答案(1)virtual (2)Component* (3)Decorator(myC) (4)Decorator::prtTicket() (5)newSalesTicket()

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

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