首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
请认真阅读以下关于某传输系统的技术说明、状态转换图及C++代码,根据要求回答问题1和问题2。 【说明】 传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening(正在打开)、StayOpen(保持打开)和Cl
请认真阅读以下关于某传输系统的技术说明、状态转换图及C++代码,根据要求回答问题1和问题2。 【说明】 传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening(正在打开)、StayOpen(保持打开)和Cl
admin
2009-02-15
46
问题
请认真阅读以下关于某传输系统的技术说明、状态转换图及C++代码,根据要求回答问题1和问题2。
【说明】
传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening(正在打开)、StayOpen(保持打开)和Closing(正在关闭)5种状态。触发状态的转换事件有click、complete和timeout 3种,事件与其相应的状态转换如图6-18所示。
下面的【C++代码1】与【C++代码2】分别用两种不同的设计思路对传输门进行状态模拟,请填补代码段中的空缺语句。
【C++代码1】
const int CLOSED = 1; const int OPENING = 2;
const int OPEN = 3; const int CLOSING = 4;
const int STAYOPEN = 5; //定义状态变量,用不同整数表示不同状态
class Door {
private:
private:
int state; //传输门当前状态
void setState(int state) { this->state = stale; } //设置当前状态
public:
Door () :state (CLOSED) { };
void getState() { //根据当前状态输出相应的字符串
switch(state) {
case OPENING: cout <<"OPENING" << endl; break;
case CLOSED: cout << "CLOSED" << endl; break;
case OPEN: cout << "OPEN" << endl; break;
case CLOSING: cout << "CLOSING" << endl; break;
case STAYOPEN: cout << "STAYOPEN" << endl; break;
}
}
void click() { //发生click事件时进行状态转换
if ( (1) ) setState(OPENING);
else if ( (2) ) setState(CLOSING);
else if ( (3) ) setState(STAYOPEN);
}
void timeout() { //发生timeout事件时进行状态转换
if (state == OPEN) setState(CLOSING);
}
void complete() { //发生complete事件时进行状态转换
if (state == OPENING) setState(OPEN);
else if (state == CLOSING) setState(CLOSED);
}
};
int main(){
Door aDoor;
aDoor.getState(); aDoor.click(); aDoor.getState(); aDoor.complete();
aDoor.getState(); aDoor.click(); aDoor.getState(); aDoor.click();
aDoor.getState(); return 0;
}
【C++代码2】
class Door {
public:
DoorState *CLOSED, *OPENING, *OPEN, *CLOSING, *STAYOPEN, *state;
Door();
virtual ~Door() { ... //释放申请的内存,此处代码省略};
void setState(DoorState *state) { this->state = state; }
void getState() {
//例如,当前状态为CLOSED时,输出字符串为"CLOSED"
};
void click();
void timeout();
void complete();
};
Door::Door() {
CLOSED = new DoorClosed(this);
OPENING = new DoorOpening(this);
OPEN = new DoorOpen(this);
CLOSING = new DoorClosing(this);
STAYOPEN = new DoorStayOpen(this);
state = CLOSED;
}
void Door::click(){ (4);}
void Door::timeout(){ (5); }
void Door::complete(){ (6); }
class DoorState{ //定义一个抽象的状态,它是所有状态类的基类
protected: Door *door;
public:
DoorState(Door *door) { this->door = door; }
virtual ~DoorState(void);
virtual void click() {}
virtual void complete() {}
virtual void timeout() {}
};
class DoorClosed :public DoorState{ //定义一个基本的closed状态
public:
DoorClosed(Door *door):DoorState(door) {}
virtual ~ DoorClosed (){}
void click();
};
void DoorClosed::click() { (7); }
//其他状态类的定义与实现代码省略
iht main(){
Door aDoor;
aDoor.getState(); aDoor.click(); aDoor.getState(); aDoor.complete();
aDoor.getState(); aDoor.timeout(); aDoor.getState(); return 0;
选项
答案
(1)state==CLOSED || state==CLOSING (2)state==OPENING || state==STAYOPEN (3)state==OPEN (4)state->click() (5)state->timeout() (6)state->complete() (7)door->setState(door->OPENING)
解析
这是一道要求读者掌握状态转换图的程序设计与实现的综合题。本试题的解答思路如下。
根据(1)空缺处所在的程序段给出的注释信息“发生click事件时进行状态转换”可知,(1)空缺处所在的方法为click,表示当发生click事件时应该发生什么状态转换。找出传输门响应事件与其状态转换图(见图6-18)与click事件相关的内容,并特别注意箭头所指的方向。由于发生click事件前的状态Closed、Closing分别跳转到状态Opening,因此(1)空缺处所填写的内容是“state == CLOSED || state == CLOSING”。
同理,由如图6-18所示中的状态转换关系可知,发生click事件前的状态Opening、Stayopen分别跳转到状态Closing,即(2)空缺处所填写的内容是“state == OPENING || state == STAYOPEN”;发生click事件前的状态Open跳转到状态StayOpen,即(3)空缺处所填写的内容是“state == OPEN”。
仔细阅读【C++代码2】程序段,由语句“private DoorState state=CLOSED;”可知,类Door的state成员变量用于记录类Door所处的状态,而state变量的类型为Doorstate*。由语句“virtual void click(){}”、“virtual void complete(){}”和“virtual void timeout(){}”可知,Doorstate中分别具有click、timeout和 complete方法用来响应对应的事件。根据(4)空缺处所在程序段“voidDoor::click()”可得,(4)空缺处所填写的内容是“state->click()”。
同理,根据(5)空缺处所在程序段“void Door::timeout()”可得,(5)空缺处所填写的内容是“state->timeout()”:根据(6)空缺处所在程序段“void Door::complete()”可得,(6)空缺处所填写的内容是“state->complete()”。
根据(7)空缺处所在程序段给出的注释信息“定义一个基本的Closed状态”和语句“void DoorClosed::click()”可知,(7)空缺处所填写的内容与传输门当前状态为Closed且发生Click事件时状态的迁移有关。结合如图6-18所示中的状态转换关系可知,在Click事件下Closed状态将迁移到Opening,因此(7)空缺处应该将传输门的状态设置为Opening。由于Doorstate变量存储了当前其存储的传输门的实例,因此可直接调用其方法setState设置状态。同时考虑到传输门的状态采用类的实例变量表示,故(7)空缺处所填写的内容为“door->setState(door->OPENING)”。
转载请注明原文地址:https://jikaoti.com/ti/FrW7FFFM
本试题收录于:
程序员下午应用技术考试题库软考初级分类
0
程序员下午应用技术考试
软考初级
相关试题推荐
在Word(38)________________模式下,随着输入新的文字,后面原有的文字将会被覆盖。
某商场统计了每个月的销售总额,坚持了多年。每次公布上月销售额时,还都采用同比和环比概念与历史数据进行对比。以下叙述中,正确的是________________。
________________不会是信息系统的功能。
对数据分析处理人员的素质要求不包括()。
某软件公司规定,该公司软件产品的版本号由二至四个部分组成:主版本号次版本号[.内部版本号][.修订号]。对该公司同一软件的以下四个版本号中最新的版本号是(
某班级有40名学生,本次数学考试大多在80分上下。老师为了快速统计平均分,对每个学生的分数按80分为基准,记录其相对分(多出的分值用正数表示,减少的分值用负数表示,恰巧等于80分时用0表示),再统计出各种相对分的人数,如下表:根据上表可推算出,这次考试
在Excel2007中,在单元格A1中输入函数“=LEN(”信息处理技术员”)”,按回车键后,则A1单元格中的值为__________。
某互联网公司建立的用户画像(标签化的用户信息)包括人口属性和行为特征两大类,()属于行为特征。
___________接口是目前微机上最流行的I/O接口,具有支持热插拔、连接灵活、独立供电等优点,可以连接常见的鼠标、键盘、打印机、扫描仪、摄像头、充电器、闪存盘、MP3机、手机、数码相机、移动硬盘、外置光驱、Modem等几乎所有的外部设备。
阅读下列说明和HTML文本,分析其中嵌入的JavaScrlpt脚本,将应填入<u>(n)</u>处的语句写在对应栏内。[说明]本题实现用鼠标拖拽图片在Web页内移动的功能。将鼠标放在图片上,按下左键,移动鼠标便可带动图片一起移动。[
随机试题
决定将党在抗日战争时期实行的减租减息政策改变为实现“耕者有其田”政策的文件是()
下列关于行政编制管理的表述,不正确的是()
完整的软腭形成约在胚牙合期的
患者身热,微恶风,汗少,肢体酸重,头昏重胀痛,咳嗽痰黏,鼻流浊涕,心烦,口渴,舌苔薄黄而腻,脉濡数。治疗应首选()
毛果芸香碱不适用于
A.血瘀痰阻B.气滞血瘀C.胞脉失养D.寒凝E.湿热下注患者,女,23岁,每次经前或经期小腹胀痛,证属()。
某车间第一季度的成本预算如下:可控成本总额为30万元,其中固定成本为14万元;不可控成本为20万元,全部为固定成本,预算产量为20000件。第一季度的实际成本资料如下:可控成本为32万元,其中固定成本为15万元;不可控成本为23万元,实际产量220
进行直接的、专门的创造性训练可以取代或脱离课堂教学。
关于我国社区中的组织,下列各项叙述正确的是()。
在曲线y=x2(x≥0)上一点M处作切线,使得切线、曲线及x轴所围成的平面图形D的面积为求:(1)切点M的坐标;(2)过切点M的切线方程.
最新回复
(
0
)