题目详情

欲开发一个绘图软件,要求使用不同的绘图程序绘制不同的图形。以绘制直线和圆形为例,对应的绘图程序如表5-1所示。

表5-1不同的绘图程序

中级软件设计师,历年真题,2013年下半年(下午)《软件设计师》真题

该绘图软件的扩展性要求,将不断扩充新的图形和新的绘图程序。为了避免出现类爆炸的情况,现采用桥接(Bridge)模式来实现上述要求,得到如图5-1所示的类图。

中级软件设计师,历年真题,2013年下半年(下午)《软件设计师》真题

图5-1类图

【C++代码】

class?DP1{

public:

static void draw_a_line(double?x1,double?y1,double?x2,double?y2){/*代码省略*/}

static void draw_a_circle(double?x,double?y,double?r){/*代码省略*/}

};

class?DP2{

public:

static void drawline(double x1,double x2,double y1,double y2){/*代码省略*/}

static void drawcircle(double x,double y,double r){/*代码省略*/}

};

class?Drawing{

public:

(1);

(2);

};

class V1Drawing:public Drawing{

public:

void drawLine(double?x1,double?y1,double?x2,double?y2){/*代码省略*/}

void drawCircle(double?x,double?y,double?r){(3);}

};

class V2Drawing:public?Drawing{

public:

void drawLine(double?x1,double?y1,double?x2,double?y2){/*代码省略*/}

void drawCircle(double?x,double y,double?r){(4);}

};

class Shape{

public:

(5);

Shape(Drawing*dp){_dp=dp;}

void drawLine(double?x1,double?y1,double?x2,double y2){_dp->drawLine(x1,y1,x2,y2);}

void drawCircle(double?x,double?y,double r){_dp->drawCircle(x,y,r);}

private:Drawing*_dp;

};

class?Rectangle:public?Shape{

public:

void draw(  ){/*代码省略*/}

//其余代码省略

};

class Circle:public Shape{

private:double_x,_y,_r;

public:

Circle(Drawing*dp,double x,double?y,double r):(6){_x=x;_y=y;_r=r;}

void draw(  ){drawCircle(_x,_y,_r);}

};

正确答案及解析

正确答案
解析

(1)virtual void drawLine(double x1,double y1,double x2,double y2)=0

(2)virtual void drawCircle(double x,double y,double r)=0

(3)DP1::draw_a_circle(x,y,r)

(4)DP2::drawcircle(x,y,r)

(5)virtual void?draw()=0

(6)Shape(dp)

根据类图,可知:Drawing类有两个函数drawLine()、drawCircle(),在从继承于它的两个子类V1Drawing、V2Drawing中drawLine()、drawCircle()得到返回值类型为void及函数参数。则(1)为virtual void drawLine(double x1,double y1,double x2,double y2)=0;(2)为virtual void drawCircle(double x,double y,double r)=0。

根据V1Drawing与DP1之间的关联关系,V2Drawing与DP2之间的关联关系,可知(3)是去调用DP1中的静态函数draw_a_circle(double x,double y,double r),则(3)为DP1::draw_a_circle(x,y,r);(4)问同理,答案为DP2::drawcircle(x,y,r)。

(5)问从类图中可知,Shape有三个方法draw()、drawLine()、drawCircle();分析题目中给出的Shape的定义,少了一个draw()函数,可知(5)为draw(),在根据继承于Shape的Circle和Rectangle分析,函数返回值为void,参数为空,则(5)为virtual void draw()=0。

(6)空考查继承结构中子类构造函数的定义。构造子类对象时,需要调用基类的构造函数,这可以通过初始化列表显式指明需要调用的基类的构造函数。在本题中,上文Shape类只定义了一个构造函数,所以这里填写的应该为“Shape(dp)”。

中级软件设计师,历年真题,2013年下半年(下午)《软件设计师》真题

包含此试题的试卷

你可能感兴趣的试题

单选题

设16位浮点数,其中阶符1位、阶码值6位、数符1位、尾数8位。若阶码用移码表示,尾数用补码表示,则该浮点数所能表示的数值范围是( )。

中级嵌入式系统设计师,章节练习,软件水平考试《中级嵌入式系统设计师》

  • A.见图A
  • B.见图B
  • C.见图C
  • D.见图D
查看答案
单选题

平均故障间隔时间MTBF用以表示系统平均无故障可正常运行的时间,下列与MTBF有关的叙述不正确的是______。

中级嵌入式系统设计师,章节练习,软件水平考试《中级嵌入式系统设计师》

  • A.见图A
  • B.见图B
  • C.见图C
  • D.见图D
查看答案
问答题

初级网络管理员,专项练习,软件水平考试《网络管理员》模拟题

初级网络管理员,专项练习,软件水平考试《网络管理员》模拟题

查看答案
单选题

中级软件设计师,模拟试题,2022年软件水平考试《中级软件设计师》模拟题

  • A.A
  • B.B
  • C.C
  • D.D
查看答案
单选题

中级软件设计师,模拟试题,2022年软件水平考试《中级软件设计师》模拟题

  • A.R
  • B.S
  • C.RS
  • D.R,S
查看答案

相关题库更多 +