[说明]
某绘图系统存在Point、Line和Square 3种图元,它们具有Shape接口,图元的类图关系如图8-5所示。
现要将Circle图元加入此绘图系统以实现功能扩充。已知某第三方库已经提供了XCircle类,且完全满足系统新增的Circle图元所需的功能,但XCircle不是由Shape派生而来的,它提供的接口不被系统直接使用。[C++代码1]既使用了Xcircle,又遵循了Shape规定的接口,既避免了从头开发一个新的Circle类,又可以不修改绘图系统中已经定义的接口。[C++代码2]根据用户指定的参数生成特定的图元实例,并对其进行显示操作。
该绘图系统定义的接口与XCircle提供的显示接口及其功能如表8-2所示。
[C++程序代码1]
class Circle:public (1)
Private:
(2) m_circle;
public:
void display()
m_circle. (3)
;
[C++程序代码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 mainint argc,char *argv[])
if(argc !=2)
cout<<"error parameters!"<<end1;
return;
int type=atoi(argv[1]) :
Factory factory;
Shape *s;
s=factory. (5) ;
if(s==NULL)
cout<<"Error get the instance!"<<end1;
return;
s->display();
(6) ;
return;
参考答案:Shape
(2) XCircte
(3) displaylt()
(4) Shape*
(5) getShapeInstance(type)
(6) delete s
解析:这是一道考查用接口实现类的功能扩充的程序分析题。本试题的解答思路如下。
由于C++具有多继承性,因此在C++实现中,通常采用多继承来代替接口。
由题干关键信息“某绘图系统存在Point、Line和Square 3种图元,它们具有Shape接口……现要将Circle图元加入此绘图系统以实现功能扩充”可知,试题明确要求Circle具有Shape接口,因此(1)空缺处应填入“Shape”。
由于[C++代码1]既使用了XCircle,又遵循了Shape规定的接口,即重用xCinle类而不用从头开发一个新的Circle类,因此,凡是在Circle类实现Shape的接口时,都应调用相应的XCircle类提供的方法。即(2)空缺处应填入“Xcircle”,(3)空缺处应填入“displayIt()”。
通过阅读[C++代码2]程序,由于(5)空缺处调用。factory对象的方法,而类Factory 只有一个方法为getShapeInstance,因此(5)空缺处应填入“getShapeInstance(type)”。其中,参数type为用户运行程序时指定的参数,表明需要生成哪种类型的对象。
同理,由于s是Shape*类型,因此(4)空缺处所在的语句“getShapeInstance(int type)”的返回值类型为Shape*,即(4)空缺处应填入“Shape*”。
由于程序退出前需要释放指针s所占用的内存空间,因此(6)空缺处应填入“delete s”。