阅读以下关于某绘图系统的技术说明、部分UML类图及C++程序,将C++程序中(1)~(6)空缺处的语句填写完整。 【说明】 某绘图系统存在Point、Line和Square这三种图元,它们具有Shape接口,图元的类图关系如图5-10所示。

admin2012-12-10  29

问题 阅读以下关于某绘图系统的技术说明、部分UML类图及C++程序,将C++程序中(1)~(6)空缺处的语句填写完整。
    【说明】
   某绘图系统存在Point、Line和Square这三种图元,它们具有Shape接口,图元的类图关系如图5-10所示。
                                                   
   现要将Circle图元加入此绘图系统以实现功能扩充。已知某第三方库已经提供XCircle类,且完全满足系统新增的Circle图元所需的功能,但XCircle不是由Shape派生而来,它提供了的接口不被系统直接使用。【C++代码5-1】既使用了XCircle又遵循了Shape规定的接口,即避免了从头开发一个新的Circle类,又可以不修改绘图系统中已经定义的接口。【C++代码5-2】根据用户指定的参数生成特定的图元实例,并对它进行显示操作。
   该绘图系统定义的接口与XCircle提供的显示接口及其功能如表5-13所示。

【C++代码5-1】
   class Circle: public  (1)  {
     Private;
         (2)  m_circle;
     Public;
        void display(){
            m_circle.  (3)  
     }
   };
   【C++代码5-2】
   class Factory{
   public;
     (4)  getShapeInstance(int type){    //生成特定类实例
       Switch(type){
         case 0: return new Point;
         case 1: return new Rectangle;
         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;
     s=factory.(5);
     if(s==NULL){
     cout<<"Error get the instance!"<<endl;
     return;
     }
     s->display();
       (6);
     Return;
   }

选项

答案(1)Shape (2)XCircle (3)displayIt() (4)Shape* (5)getShapeInstance(type) (6)ddete s

解析 这是一道考查用接口实现类的功能扩充的程序分析题。本试题的解答思路如下。
   由于C++具有多继承性,因此在C++实现中,通常采用多继承来代替接口。
   由题干关键信息“某绘图系统存在Point、Line和Square 3种图元,它们具有Shape接口……现要将Circle图元加入此绘图系统以实现功能扩充”可知,试题明确要求Circle具有Shape接口,因此(1)空缺处应填入“Shape”。
   由于【C++代码5-1】既使用了XCircle,又遵循了Shape规定的接口,即重用XCinle类而不用从头开发一个新的Circle类。因此,凡是Circle类实现Shape的接口时,都应调用相应的XCircle类提供的方法。即(2)空缺处应填入“Xcircle”,(3)空缺处应填入“displayIt()”。
   通过阅读【C++代码5-2】程序,由于(5)空缺处调用factory对象的方法,而类Factory只有一个方法为getShapeInstance,因此(5)空缺处应填入“getShapeInstance(type)”。其中,参数type为用户运行程序时指定的参数,表明需要生成哪种类型的对象。
   同理,由于s是Shape*类型,因此(4)空缺处所在的语句“getShapeInstance(int type)”的返回值类型为Shape*,即(4)空缺处应填入“Shape*”。
   由于程序退出前需要释放指针s所占用的内存空间,因此(6)空缺处应填入“delete s”。
转载请注明原文地址:https://jikaoti.com/ti/nbW7FFFM
0

最新回复(0)