阅读以下说明和C++代码, [说明] 现要编写一个画矩形的程序,目前有两个画图程序:DP1和DP2,DP1用
阅读以下说明和C++代码,
[说明]
现要编写一个画矩形的程序,目前有两个画图程序:DP1和DP2,DP1用函数draw_a_line(x1,y1,x2,y2)画一条直线,DP2则用drawline(x1,x2,y1,y2)画一条直线。当实例化矩形时,确定使用DP1还是DP2。为了适应变化,包括“不同类型的形状”和“不同类型的画图程序”,将抽象部分与实现部分分离,使它们可以独立地变化。这里,“抽象部分”对应“形状”,“实现部分”对应“画图”,与一般的接口(抽象方法)与具体实现不同。这种应用称为Bridge(桥接)模式。图6-1显示了各个类间的关系。
[图6-1]
这样,系统始终只处理3个对象:Shape对象、Drawingg对象、DP1或DP2对象。以下是C++语言实现,能够正确编译通过。
[C++代码]
class DP1{
public:
static void draw_a_line(double x1,double y1,double x2,double y2){
//省略具体实现
}
};
class DP2{
public:
static void drawline(double x1,double x2,double y1,double y2){
//省略具体实现
}
};
class Drawing{
public:
(1) void drawLine(double x1,double y1,double x2,double y2)=0;
};
class V1Drawing:public Drawing{
public:
void drawLine(double x1,double y1,double x2,double y2){
DP1::draw_a_line(x1,y1,x2,y2);
}
};
class V2Drawing:public Drawing{
public:
void drawLine(double x1,double y1,double x2,double y2){
(2)
}
};
class Shape{
privatc:
(3) dp;
public:
Shape(Drawing*dp);
virtual void draw()=0;
void drawLine(double x1,double y1,double x2,double y2);
};
Shape::Shape(Drawing*dp)
{
_dp=dp;
}
void Shape::drawLine(double x1,double y1,double x2,double y2)
{ //画一条直线
(4);
}
class Rectangle:public Shape{
privatc:
double_x1,_y1,_x2,_y2;
public:
Rectangle(Drawing *dp,double x1,double y1,
double x2,double y2);
void draw();
};
Rectangle::Rectangle(Drawing*dp,double x1,double y1,double x2,double y2)
: (5)
{
_x1=x1;_y1=yl;_x2=x2;_y2=y2;
}
void Rectangle::draw()
{
//省略具体实现
}
(1)
virtual 解析:由函数drawLine()结尾的“=0”易知,空(1)应填virtual。
有一市政建设工程,若甲、乙两工程队合做,需要12个月完成;若甲队先做5个月,剩余部分再由甲、乙两队 数学 2020-05-17 …
这样的题有规律吗?有1、2、3、4、5四个数,组成一个三位数和一个两位数,要使这两个数的乘积最大, 数学 2020-06-10 …
英语翻译1我想要一个大杯、/中杯/小杯橙汁2我想要两大份/两小份薯条.3两小份薯条是多少钱4两小份 英语 2020-07-05 …
请教小学数学题一个两位数十位数字是个位数字的2倍如果个位数字与十位数字对调得到新的两位数与原数的和 数学 2020-07-17 …
两杯四两的酒分给四个人喝前两天看都市梦想的家庭作业题研究了好久没弄明白有两个四两的杯子都装满了酒还有 数学 2020-11-04 …
农夫工作收入分配甲乙两人耕地10亩,每人负责一半,已知甲翻一亩地需要一个更次,乙翻一亩地需要两个更次 数学 2020-11-30 …
在山的南北两端有甲乙两个村,两个村之间全是上下的山路,某人上山的速度是2千米每小时,下山时的速度为3 数学 2020-12-27 …
有一市政建设工程,若甲、乙两工程队合做,需要12个月完成;若甲队先做5个月,剩余部分再由甲、乙两队合 数学 2020-12-30 …
有一市政建设工程,若甲、乙两工程队合做,需要12个月完成;若甲队先做5个月,剩余部分再由甲、乙两队合 数学 2020-12-30 …
有一项市政建设工程,若甲、乙两工程队合作,需要12个月完成;若甲队先做5个月,剩余部分两队合作,还需 数学 2020-12-30 …