信管网试题内容
信管网 导航

试卷名称:2006年下半年软件设计师考试下午真题试题(案例分析)

考试年份:2006年下半年

试题来源:《2006年下半年软件设计师考试下午真题试题(案例分析)》在线考试

试题内容

试题六
阅读以下说明和C++代码。
【说明】
传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening (正在打开)、StayOpen(保持打开)和Closing(正在关闭)五种状态。触发传输门状态转换的事件有click、complete和timeout三种。事件与其相应的状态转换如下图所示。

下面的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:
int state;  //传输门当前状态
void setState(int state){ this->state=state;}  //设置当前状态
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)  ;}
//其他状态类的定义与实现代码省略
int main() {
Door aDoor;
aDoor.getState();aDoor.click();aDoor.getState();aDoor.complete();
aDoor.getState();aDoor.timeout();aDoor.getState();return 0;
}



参考答案:暂时没有答案(仅供参考) 收藏

【解析】

普通会员无法查看试题解析。[开通试题解析服务]