阅读以下说明和C++代码,将应填入(n)处的字句写在答题纸对应栏内。 【说明】现有一个显示系统,要显示的图形有线Line、矩形Square,抽象出一个Shape类(接口),有方法显示display()。需要新增图形Circle,又已知有类XXCircle实

admin2014-10-11  33

问题 阅读以下说明和C++代码,将应填入(n)处的字句写在答题纸对应栏内。
【说明】现有一个显示系统,要显示的图形有线Line、矩形Square,抽象出一个Shape类(接口),有方法显示display()。需要新增图形Circle,又已知有类XXCircle实现了所需要实现的功能:显示displaylt()。为了继承自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:publ ic Shape(//省略具体实现
};
class Square:public Shape{//省略具体实现
};
ClasS XXCircle(
public:
void displayIt()(
//省略具体实现
}
//省略其余方法和属性
};
Class Circle:publ iC 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:returrl flew C1rcle;
default:return NULL;
}
}
};
void main(int argc,char’argv[]){
i f(argc!=2){
tout<<“error parameters!”<return;
}
int type:atoi(argv[1]);
Factory factory;
Shape。S=factory.(5);
if(S==NULL){
cout<<*Error get the instance!“< return;
}
s一>display();
delete s;
rettlrn;
}

选项

答案(1)virtual (2)new XXCircle (3)displayIt() (4)Shape*: (5)getShapeInstance(type)

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

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