【说明】 传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(

题型:问答题

问题:

【说明】
传输门是传输系统中的重要装置。传输门具有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;

【问题2】
请用150字以内的文字简要说明【C++代码1】、【C++代码2】这两种对传输门进行状态模拟的设计思路的区别之处。

考点:计算机软件水平考试初级程序员初级程序员下午试题
题型:问答题

慢性支气管炎可以引起()

A.管腔狭窄

B.支气管扩张症

C.支气管哮喘

D.阻塞性肺气肿

E.慢性肺心病

题型:问答题

对需要送入强制戒毒所的吸食、注射毒品成瘾人员实施强制戒毒,应由( )制作《强制戒毒决定书》。

A.派出所

B.县级公安机关

C.地级公安机关

D.公安分局

题型:问答题

老人如果缺乏人际交往,会由于缺乏新的信息刺激,使老人的(  )萎缩,智力水平下降。

A.肌细胞

B.脑细胞

C.红细胞

D.白细胞

题型:问答题

()的广告面积大,客户关注率最高,非常适合于有实力的大、中型企业或集团进行品牌宣传

A.对联广告

B.按钮广告

C.标识广告

D.焦点广告

题型:问答题

办理全国银期转账业务签约交易时应使用交易码()。

A.0006

B.0007

C.0008

D.0009

更多题库