阅读以下说明和C++代码,将应填入(n)处的字句写上。 [说明] 现有一个显示系统,要显示的图形有线Line、矩形Square,抽象出一个Shape类(接口),有方法显不display()。 需要新增图形Circle,又已知有类XX

admin2010-12-17  27

问题 阅读以下说明和C++代码,将应填入(n)处的字句写上。
   [说明]
   现有一个显示系统,要显示的图形有线Line、矩形Square,抽象出一个Shape类(接口),有方法显不display()。
   需要新增图形Circle,又已知有类XXCircle实现了所需要实现的功能:显示displayIt()。为了继承自shape以提供统一接口,又不希望从头开发代码,希望使用XXCircle。这样将XXcircle作为Circle的一个属性,即Circle的对象包含一个XXCircle对象。当一个Circle对象被实例化时,它必须实例化一个相应的XXCircle对象:  Circle对象收到的做任何事的请求都将转发给这个XXCircle对象。通过这种称为Adapter模式,Circle对象就可以通过“让XXCircle做实际工作”来表现自己的行为了。图6-1显示了各个类间的关系。以下是C++语言实现,能够正确编译通过。
   [图6-1]
   
   [C++代码]
   class Shape{
   public:
        (1) void display()=0;
   };
   class Line:public Shape{//省略具体实现
   };
   class Square:public Shape{//省略具体实现
   };
   class XXCircle{
   public:
       void displayIt(){
       //省略具体实现
       }
   //省略其余方法和属性
   };
   class Circle:public Shape{
   private:
       XXCircle *pxc;
   public:
       Circle();
       void display();
   };
   Circle::Circle(){
       pxc=(2);
   }
   void Circle::display()
   {
       pxc->(3);
   }
   class Factory{
   public:
        (4) getshapeInstance(int type){//生成特定类实例
           switch(type){
               case 1:return new Square;
               case 2:return new Line;
               case 3 :return new Circle;
               default:return NULL;
           }
       }
   };
   void main(int argc,char*argv[]){
       if(argc !=2){
           cout<<"error parameters!"<<endl;
           return;
       }
       int type=atoi(argv[1]);
       Factory factory;
       Shape*s=factory. (5);
       if(s==NULL){
           cout<<"Error get the instance!"<<endl;
           return;
       }
       s->display();
       delete s;
       return;
   }
(5)

选项

答案getShapeInstance(type)

解析 由“=0”可轻易判知display()函数是一个纯虚函数,因此空(1)应填virtual。
   由题设,Circle实例化时,须先实例化一个XXCircle对象,而pxc正好也是XXCircle对象指针,故空(2)应填new XXCircle。
   Circle在此充当适配器的角色,它所做的就是将消息转发给XXCircle实例,display()是“显示”消息,故调用XXCircle的相应方法,故空(3)应填displayIt()。
   方法getShapelnstance(int type)的返回值有new Line、new Square以及new Circle,参照类的层次结构,可得空(4)应填Shape*。注意是指针。
   Factory类仅定义了一个方法getShapeInstance,而此处语义正是取得一个形状进行显示,故空(5)应填getShapeInstance(type)。
转载请注明原文地址:https://jikaoti.com/ti/d9i7FFFM
0

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