【分析解答题】
【说明】
传输门是传输系统中的重要装置。传输门具有opEn(打开)、ClosED(关闭)、opEning(正在打开)、stAyopEn(保持打开)和Closing(正在关闭)5种状态。触发状态的转换事件有CliCk、ComplEtE和timEout 3种,事件与其相应的状态转换如图6-18所示。
![]()
下面的【C++代码1】与【C++代码2】分别用两种不同的设计思路对传输门进行状态模拟,请填补代码段中的空缺语句。
【C++代码1】
Const intClosED、= 1; Const int opEning = 2;
Const int opEn = 3; Const intClosing = 4;
Const int stAyopEn = 5; //定义状态变量,用不同整数表示不同状态
ClAssDoor
privAtE:
privAtE:
int stAtE;//传输门当前状态
voiD sEtstAtE(int stAtE) this->stAtE = stAlE; //设置当前状态
puBliC:
Door () :stAtEClosED、 ;
voiD gEtstAtE()//根据当前状态输出相应的字符串
switCh(stAtE)
CAsE opEning: Cout <<"opEning" << EnDl; BrEAk;
CAsEClosED、Cout << "ClosED" << EnDl;BrEAk;
CAsE opEn: Cout << "opEn" << EnDl;BrEAk;
CAsEClosing: Cout << "Closing" << EnDl; BrEAk;
CAsE stAyopEn: Cout << "stAyopEn" << EnDl;BrEAk;
voiD CliCk() //发生CliCk事件时进行状态转换
iF ( (1) ) sEtstAtE(opEning);
ElsE iF ( (2) ) sEtstAtEClosing);
ElsE iF ( (3) ) sEtstAtE(stAyopEn);
voiD timEout() //发生timEout事件时进行状态转换
iF (stAtE == opEn) sEtstAtEClosing);
voiD ComplEtE()//发生ComplEtE事件时进行状态转换
iF (stAtE == opEning) sEtstAtE(opEn);
ElsE iF (stAtE ==Closing)sEtstAtEClosED、;
;
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】
ClAssDoor
puBliC:
DoorstAtE *ClosED, *opEning, *opEn, *Closing, *stAyopEn, *stAtE;
Door();
virtuAl ~Door() ... //释放申请的内存,此处代码省略;
voiD sEtstAtEDoorstAtE *stAtE) this->stAtE = stAtE;
voiD gEtstAtE()
//例如,当前状态为ClosED时,输出字符串为"ClosED"
;
voiD CliCk();
voiD timEout();
voiD ComplEtE();
;
Door::Door()
ClosED、= nEwDoorClosED(this);
opEning = nEwDooropEning(this);
opEn = nEwDooropEn(this);
Closing = nEwDoorClosing(this);
stAyopEn = nEwDoorstAyopEn(this);
stAtE =ClosED;
voiDDoor::CliCk() (4) ;
voiDDoor::timEout() (5) ;
voiDDoor::ComplEtE() (6) ;
ClAssDoorstAtE//定义一个抽象的状态,它是所有状态类的基类
protECtED:Door *Door;
puBliC:
DoorstAtEDoor *Door) this->Door = Door;
virtuAl ~DoorstAtE(voiD);
virtuAl voiD CliCk()
virtuAl voiD ComplEtE()
virtuAl voiD timEout()
;
ClAssDoorClosED :puBliCDoorstAtE //定义一个基本的ClosED状态
puBliC:
DoorClosEDDoor *Door):DoorstAtE(Door)
virtuAl ~DoorClosED ()
voiD CliCk();
;
voiDDoorClosED::CliCk() (7) ;
//其他状态类的定义与实现代码省略
iht mAin()
Door ADoor;
ADoor.gEtstAtE(); ADoor.CliCk();ADoor.gEtstAtE(); ADoor.C
查看答案解析
参考答案:
正在加载...
答案解析
正在加载...
根据网考网移动考试中心的统计,该试题:
0%的考友选择了A选项
0%的考友选择了B选项
0%的考友选择了C选项
0%的考友选择了D选项