题目内容 (请给出正确答案)
[主观题]

阅读以下说明和C++程序代码,将程序填充完整。【说明】 有时我们希望给某个对象而不是整个类添加一些

阅读以下说明和C++程序代码,将程序填充完整。

【说明】

有时我们希望给某个对象而不是整个类添加一些功能。例如,一个图形用户界面工具箱允许你对任意一个用户界面组件添加一些特性,例如边框,或是一些行为,例如窗口滚动。使用继承机制是添加功能的一种有效途径,从其他类继承过来的边框特性可以被多个子类的实例所使用。但这种方法不够灵活,因为边框的选择是静态的,用户不能控制对组件加边框的方式和时机。

一种较为灵活的方式是将组件嵌入另一个对象中,由这个对象添加边框。我们称这个嵌入的对象为装饰。这个装饰与它所装饰的组件接口一致,因此它对使用该组件的客户透明。它将客户请求转发给该组件,并且可能在转发前后执行一些额外的动作(例如画二个边框)。透明性使得你可以递归地嵌套多个装饰,从而可以添加任意多的功能。

装饰对象结构模式的意图就是动态地给一个对象添加一些额外的职责。就增加功能来说,该模式相比生成子类更为灵活。其示意类图如图13-22所示。

阅读以下说明和C++程序代码,将程序填充完整。【说明】 有时我们希望给某个对象而不是整个类添加一些阅

程序代码13-5是该模式的一个示例,说明了如何实现用户接口装饰,函数的实现全部省略。程序中定义了VisualComponent的一个子类Decorator,我们将生成Decorator的子类以获取不同的装饰。VisualComponent类是一个描述可视对象的抽象类,它描述了绘制和事件处理的接口。Decorator的子类定义了特殊的装饰功能,BorderDecorator子类给可视组件添加一个边框,ScrollDecorator给可视组件添加滚动功能。

【程序代码13-5】

(1);

class Window

{

public:

roid SetContents (VisualComponent * contents);

};

//VisualComponent类是一个描述可视对象的抽象类

class VisllalComponent

{

public:

VisualComponent(){};

(2) void Draw(){};

Virtual void Resize(){};

};

class Decorator:public VisualComponent

{

public:

Decorator()

{

//…

};

Decorator(VisualComponent * vcom)

{

//…

};

virtual vold Draw();

virtual vold Resize();

private:

/* Decorator装饰由VisualComponent的指针实现,其在Decorator的构造函数中初始化*/

VisualComponent (3) ;

};

vold Decorator::Draw()

{

(4);//缺省实现

}

void Decorator::Resize()

{

component->Resize();//缺省实现

}

//BorderDecorator 子类为它所包含的组件添加一个边框

class BorderDecorator:public Decorator

{

public:

BorderDecorator(VisualComponent * vcom,int borderWidth)

{

//…

};

Virtual Void Draw();

private:

void DrawBorder(int);

private:

int borderWidth;

};

void BorderDecorator::Draw()

{

Decorator::Draw();

DrawBorder(_width);

}

Void BorderDecorator::DrawBorder(int Width)

{

//…

)

Void Window::SetConterlts(VlsualComponent * contents)

{

//…

}

//SerollDecorat 给可视组件添加滚动功能

class ScroliDecoratOr:public Decorator

{

public:

ScrollDecorator(VlsualComponent * vcom)

{

//…

};

//…

);

class TextView:public VisualComponent

{

//…

};

void main(void)

{

//创建一个正文视图以及放入这个正文视图的窗口

Window * window=new Window;

TcxtView * textView=new TextView;

//TextView是一个VisualComponent,它可以放入窗口中

window->SetContents(textView);

//得到一个有边界的和可以滚动的TextView,边界宽为1

window->SetContents((5));

}

查看答案
如搜索结果不匹配,请 联系老师 获取答案
您可能会需要:
您的账号:,可能会需要:
您的账号:
发送账号密码至手机
发送
更多“阅读以下说明和C++程序代码,将程序填充完整。【说明】 有时…”相关的问题

第1题

请至少写出ASP的5个特点。

点击查看答案

第2题

阅读下列说明和数据流图,回答问题。【说明】 某网络故障诊断系统使用故障代理(agent、SNMP Trap等)来

阅读下列说明和数据流图,回答问题。

【说明】

某网络故障诊断系统使用故障代理(agent、SNMP Trap等)来检测各种意外情况,如大幅丢包、路由冲突、广播风暴等。网络管理员可以在安装该系统时配置安全监控程序(如故障代理程序、实时诊断程序、报警器等),也可以在系统运行时修改配置,通过网络状态采集器和故障特征数据库,并通过控制面板上的键盘与系统进行信息交互。

在安装过程中,系统给每个故障代理赋予一个编号(即ID)和类型,并设置管理员密码以启动和关闭系统,设置故障代理事件发生时应自动拨出的电话号码。当系统检测到一个故障代理事件时,就激活警报,拨出预置的电话号码,并报告位置和检测到的事件的性质等信息。

该网络故障诊断系统的顶层图如图13-16所示,0层图如图13-17所示,加工4的子图如图13-18所示。

【问题1】

将顶层图中的(1)和(2)空填充完整。

【问题2】

0层图中的数据文件“配置信息”是多余的吗?若是,请说明理由;若不是,请指出它会影响。层图中的哪些(哪个)加工(除加工“1系统配置”之外)?

【问题3】

指出图13-18所示的加工4的子图中遗漏的数据流。

注意:书写格式为“缺少从××到××的数据流××”或“××缺少输入(出)数据流××”。若未按格式书写,将被扣分。

点击查看答案

第3题

阅读以下函数说明和Java代码,将应填入(n)处的字句写在对应栏内。 【说明】 下面的程序先构造Point类

阅读以下函数说明和Java代码,将应填入(n)处的字句写在对应栏内。

【说明】

下面的程序先构造Point类,再顺序构造Ball类。由于在类Ball中不能直接存取类Point中的xCoordinate及yCoordinate属性值,Ball中的toString方法调用Point类中的toStrinS方法输出中心点的值。在MovingBsll类的toString方法中,super.toString调用父类Ball的toString方法输出类Ball中声明的属性值。

【Java代码】

//Point.java文件

public class Point{

private double xCoordinate;

private double yCoordinate;

public Point(){}

public Point(double x,double y){

xCoordinate=x;

yCoordinate=y;

}

public String toStrthg(){

return"("+Double.toString(xCoordinate)+","

+Double.toString(yCoordinate)+")";

}

//other methods

}

//Ball.java文件

public class Ball{

private (1);//中心点

private double radius;//半径

private String color;//颜色

public Ball(){}

public Ball(double xValue, double yValue, double r){

//具有中心点及其半径的构造方法

center=(2);//调用类Point中的构造方法

radius=r;

}

public Ball(double xValue, double yValue, double r, String c){

//具有中心点、半径和颜色的构造方法

(3);//调用3个参数的构造方法

color=c;

}

public String toString(){

return "A ball with center"+center.toString()

+",radius "+Double.toString(radius)+",color"+color;

}

//other methods

}

class MovingBall (4) {

private double speed;

public MovingBall(){}

public MoyingBall(double xValue, double yValue, double r, String c, double s){

(5);//调用父类Ball中具有4个参数的构造方法

speed=s;

}

public String toString(){

return super.toString()+",speed"+Double.toString(speed);

}

//other methods

}

public class test{

public static void main(String args[]){

MovingBall mb=new MovingBall(10,20,40,"green",25);

System.out.println(mb);

}

}

点击查看答案

第4题

根据题意,给出“地铁票”类的主要属性。

点击查看答案

第5题

阅读以下说明,回答问题1至问题3,将解答写在对应栏内。 【说明】 下面是某医院信息管理系统中需要的

阅读以下说明,回答问题1至问题3,将解答写在对应栏内。

【说明】

下面是某医院信息管理系统中需要的信息。

科室:科名、科地址、科电话、医生姓名。

病房:病房号、床位号、所属科室名。

医生:姓名、职称、所属科室名、年龄、工作证号。

病人:病历号、姓名、性别、诊断、主管医生、病房。

其中,一个科室有多个病房,多个医生,一个病房只能属于一个科室,一个医生只属于一个科室,但可以负责多个病人的诊治,一个病人的主管医生只有一个。

画出上述信息涉及的E—R图。

点击查看答案

第6题

指出在哪些图中遗漏了哪些数据流。回答时请用如下形式之一: XX图中遗漏了XX加工(或文件)流向XX加

指出在哪些图中遗漏了哪些数据流。回答时请用如下形式之一:

XX图中遗漏了XX加工(或文件)流向XX加工(或文件)的XX数据流。

XX加工XX遗漏了输入(或输出)数据流XX。

点击查看答案

第7题

阅读下列函数说明和C代码,填入(n)处。 [说明] 以下C语言程序实现了生成从里到外是连续的自然数排

阅读下列函数说明和C代码,填入(n)处。

[说明]

以下C语言程序实现了生成从里到外是连续的自然数排列的回旋矩阵,矩阵形式如下:

7 6 5 16

8 1 4 15

9 2 3 14

10 11 12 13

程序的变量说明如下:

x1:矩阵上边界;

x2:矩阵下边界;

y1:矩阵左边界;

y2:矩阵右边界;

s:数组元素升降标记,s等于1为升,s等于-1为降;

a[]:存放矩阵元素的数组。

仔细阅读C语言程序源码,将(n)处的语句补充完整。(注:每处仅一个语句)

[C程序]

include<stdio.h>

void main ( )

{

const int N=20;

int i=0,j=0,a[N][N],n;

int m,x1,x2,y1,y2,s;

while (1)

{

Printf ("\ninput matrix row N( N>=2): ");

scanf ("%d",&n);

printf ("\n");

if (n>=2)

break;

}

m=n*n;

x1=0; y1=0; x2=n; y2=n;

if(n%2==0)

{j=n-1; y2=n-1; s=1;}

else

{i=n-1; y1=1; s=-1; }

while (1)

{

if (s==1)

{

for (i; i<x2; i++) a[i][j]=m--;

i--;

j--;

(1)

for (j;j>=y1;j--) a[i][j]=m--;

j++;

i--;

y1++;

(2)

}

else

{

for (i;i>=x1;i--)

a[i][j]=m--;

i++;

j++;

(3)

for (j;j<y2;j++)

(4)

(5)

i++;

(6)

S=i;

}

if (m<1) break;

}

for (i=O;i<n; i++)

{

for (j=O;j<n;j++)

printf ("%6d",a[i][j]);

printf ("\n");

}

printf ("\n");

}

点击查看答案

第8题

阅读下列函数说明和C代码,填入(n)处字句,并回答相应问题。[说明] 背包问题就是有不同价值、不同重

阅读下列函数说明和C代码,填入(n)处字句,并回答相应问题。

[说明]

背包问题就是有不同价值、不同重量的物品n件,求从这n件物品中选取一部分物品的选择方案,使选中物品的总重量不超过指定的限制重量,而且选中物品的价值之和为最大。

背包问题是一个典型的NP完全难题。对该问题求解方法的研究无论是在理论上,还是在实践中都具有一定的意义。如管理中的资源分配、投资决策、装载问题等均可建模为背包问题。

常用的背包问题求解方法很多,但本题中采用了一种新的算法来求解背包问题。该算法思想为:首先要对物品进行价重比排序,然后按价重比从大到小依次装进包裹。这种方法并不能找到最佳的方案,因为有某些特殊情况存在,但只要把包中重量最大的物品取出,继续装入,直到达到limitweight,这时的物品就是limit weight的最大价值。这种算法不需要逐个进行试探,所以在数据非常大时,执行效率主要由排序的时间复杂度决定。该算法的流程图为图11-4。

仔细阅读程序说明和C程序流程图及源码,回答问题1和问题2。

[流程图11-4]

[程序说明]

struct Thing:物品结构

typedef struct Bag:背包结构类型

input ( ):将物品按序号依次存入数组函数

inbag ( ):物品按物价比入包函数

init ( ):初始化函数

sort ( ):对物品按价格重量比排序函数

outbag ( ):取出包中weiht最大的物品函数

print ( ):最佳方案输出函数

[C程序]

define N 255

struct Thing {

double weight;

double value;

double dens;

}thing[N];

typedef stmct Bag {

Thing thing [N];

double weighttmp;

double sumvalue;

}bag,best;

inbag ( )

{

do{

bag.thing[i]=thing[i]

(1)

(2)

i++;

}while ( (3) )

}

init ( )

{

for (inti=0; i<N; i++)

{

input (thing[i].weight, thing [i].value)

thing [i].dens=thing[i].value/thing [i].weight;

};

}

main ( )

{

init ( );

sort ( );

inbag ( );

do {

best=bag; //把包中物品放入暂存数组

outbag ( ); //取出包中weight最大的物品

(4)

}while ( (5))

print (best); //输出temp因为是最佳方案

}

根据程序说明及流程图、部分C源码,充分理解算法思想,填入(n)处。

点击查看答案

第9题

阅读以下函数说明和Java代码,将应填入(n)处的字句写在对应栏内。 【说明】 现要编写一个画矩形的程

阅读以下函数说明和Java代码,将应填入(n)处的字句写在对应栏内。

【说明】

现要编写一个画矩形的程序,目前有两个画图程序:DP1和DP2,DP1用函数draw_a_line(x1,y1,x2,y2)画一条直线,DP2则用drawline(x1,x2,y1,y2)画一条直线。当实例画矩形时,确定使用DP1还是DP2。

为了适应变化,包括“不同类型的形状”和“不同类型的画图程序”,将抽象部分与实现部分分离,使它们可以独立地变化。这里,“抽象部分”对应“形状”,“实现部分”对应“画图”,与一般的接口(抽象方法)与具体实现不同。这种应用称为Bridge(桥接)模式。图9-6显示了各个类间的关系。

这样,系统始终只处理3个对象:Shape对象、Drawing对象、DP1或DP2对象。以下是 Java语言实现,能够正确编译通过。

【Java代码】

//DP1.java文件

public class DP1{

static public void draw_a line(double x1,double y1,

double x2,double y2){

//省略具体实现

}

}

//DP2.java文件

public class DP2{

static public void drawline(double x1,double y1,

double x2,double y2){

//省略具体实现

}

}

//Drawing.java文件

(1) public class Drawing{

abstract public void drawLine(double x1, double y1, double x2, double y2);

}

//V1Drawing.java文件

public class V1Drawing extends Drawing{

public void drawLine(double x1, double y1, double x2, double y2){

DP1.draw_a_line(x1,y1,x2,y2);

}

}

//V2Drawing.java文件

public class V2Drawing extends Drawing{

public void drawLine(double x1,double y1,

double x2, double y2)(//画一条直线

(2);

}

}

//Shape.java文件

abstract public class Shape{

abstract public void draw();

private (3) _dp;

Shape(Drawing dp){

_dp=dp;

}

protected void drawLine(double x1,double y1,

double x2, double y2){

(4);

}

}

//Rectangle.java文件

public class Rectangle extends Shape{

private double_x1,_x2,_y1,_y2;

public Rectangle(Drawing dp,

double x1,double y1,

double x2,double y2){

(5);

_x1=x1;_x2=x2;

_y1=y1;_y2=y2;

}

public void draw(){

//省略具体实现

}

}

点击查看答案

第10题

阅读下列说明和图,回答问题1至问题3。 【说明】 某学校的教学系统描述如下。 学生信息包括:学号(Sno)

阅读下列说明和图,回答问题1至问题3。

【说明】

某学校的教学系统描述如下。

学生信息包括:学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、入学年份(Syear)、主修专业(Smajor),其中学号是入学时唯一编定的。

教师信息包括:教工号(Tno)、姓名(Tname)、性别(Tsex)、年龄(Tage)、职称(Ttitle),其中教工号是唯一编定的。

课程信息包括:课程号(Cno)、课程名称(Cname)、学时(Cperiod)、学分(Ccredit),其中课程号是唯一编定的。

每个专业每个年级只有一个班级,这样班级就可用入学年份标识。

每位教师只教授特定的一门的课程,每门课程可以有多个教师教授,各位老师的上课地点及上课时间有所不同。注意:一门课程至少有一位教师教授,否则这门课程就视为不存在。

每位学生可以同时选修多门不同的课程,一门课程至少要有10位学生选修,否则就取消这门课程的开设。注意:选修课程时要指定任课教师,不能重复选修同一门课程。课程结束后,任课教师给选修该课程的学生一个成绩(Grade)。注意:教师不能给没有选修他所教授课程的学生成绩,即使选修了其他教师教授的同一门课也不行。

如图9-11所示是经分析得到的E-R图。

根据题意,给出联系的属性。实体间的联系有“一对一”、“一对多”和“多对多”,指出各联系分别属于哪一种。

点击查看答案
热门考试 全部 >
相关试卷 全部 >
账号:
你好,尊敬的上学吧用户
发送账号至手机
密码将被重置
获取验证码
发送
温馨提示
该问题答案仅针对搜题卡用户开放,请点击购买搜题卡。
马上购买搜题卡
我已购买搜题卡, 登录账号 继续查看答案
重置密码
确认修改
谢谢您的反馈

您认为本题答案有误,我们将认真、仔细核查,
如果您知道正确答案,欢迎您来纠错

警告:系统检测到您的账号存在安全风险

为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!

微信搜一搜
上学吧
点击打开微信
警告:系统检测到您的账号存在安全风险
抱歉,您的账号因涉嫌违反上学吧购买须知被冻结。您可在“上学吧”微信公众号中的“官网服务”-“账号解封申请”申请解封,或联系客服
微信搜一搜
上学吧
点击打开微信