阅读以下说明和C++代码,将应填入(n)处的字句写在答题纸对应栏内。 【说明】 现要编写一个画矩形的程序,目前有两个画图程序:DP1和DP2,DP1用函数draw_a_line(x1,y1,x2,y2)画一条直线,DP2则用drawline(x1,x2,y

admin2014-10-11  22

问题 阅读以下说明和C++代码,将应填入(n)处的字句写在答题纸对应栏内。
【说明】
现要编写一个画矩形的程序,目前有两个画图程序:DP1和DP2,DP1用函数draw_a_line(x1,y1,x2,y2)画一条直线,DP2则用drawline(x1,x2,y1,y2)画一条直线。当实例化矩形时,确定使用DPI还是DP2。为了适应变化,包括“不同类型的形状”和“不同类型的画图程序”,将抽象部分与实现部分分离,使它们可以独立地变化。这里,“抽象部分”对应“形状”,“实现部分”对应“画图”,与一般的接口(抽象方法)与具体实现不同。这种应用称为Bridge(桥接)模式。图6—1显示了各个类间的关系。

【图6.1】
这样,系统始终只处理3个对象:Shape对象、Drawing对象、DP1或DP2对象。以下是C++语言实现,能够正确编译通过。
【C++代码】
ClassDPI{
publiC:
staticvo~dd~aw—a—l~he(doublex1,doubley1,doublex2,doubley2)(
//省略具体实现
}
};
ClassDP2{
publiC:
statiCvoiddrawline(doublex1,doublex2,doubley1,doubley2)(
//省略具体实现
}
};
ClassDrawing(
public:
(1)voiddrawLine(doublex1,doubley1,doublex2,doubley2)=0;
};
ClassV1Drawing:publiCDrawing{
public:
voiddrawL~he(doublex1,doubley1,doublex2,doubley2){
DPi::draw—a一lihe(x1,y1,x2,y2);
}
};
ClassV2Drawing:publiCDrawing{
publiC:
voiddrawLine(doublex1,doubley1,doublex2,doubley2){
(2);
}
};
classShape(
private:
(3)_dp;
public:
Shape(Drawing。dp);
virtualvoiddraw()=0;
voiddrawLine(doublexl,doubley1,doublex2,doubley2);
};
Shape::Shape(Drawing*dp);
{
dp=dp;
}
voidShape::drawLine(doub2ex1,doubley1,doub2ex2,doubley2)
{//画一条直线
(4);
}
ClaasRectangle:publiCShape{
private:
double_x1,_y1,_x2,_y2;
public:
Rectangle(Drawing*dp,doublex1,doubley1,
doublex2,doubley2);
V01ddraw();
};
Rectangle::Rectangle(Drawing‘dp,doublexl,doubleyl,doublex2,doubley2)_
:(5)
{
x1=x1;—y1=y1;_x2=x2;_y2=y2;
}
voidRectangle::draw()
{
//省略具体实现

选项

答案(1)virtual (2)DP2::drawline(x1,x2,y1,y2) (3)Drawing (4)_dp->drawLine(x1,y1,x2,y2) (5)Shape(dp)

解析 由函数drawLine0结尾的“=0”易知,空(1)应填virtual。
空(2)是调用DP2系统的相应方法,可参照DPI的对应函数的函数体,但要注意参数不完全相同,应填DP2::drawline(x1,x2,y1,y2)。一dpN性是用来存储Drawing对象的,参照Shape的构造函数可确认这一点,空(3)应填Drawing*。Shape类drawLine方法是通过调用Drawing对的方法来实现所需要的功能,因此空(4)应填dp->drawLine(x1,y1,x2,y2)。空(5)显然是基类构造函数,应填Shape(dp)。
转载请注明原文地址:https://kaotiyun.com/show/naDZ777K
0

随机试题
最新回复(0)