首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读下列说明和C++代码。 [说明] 某大型商场内安装了多个简易的纸巾售卖机,自动出售2元钱一包的纸巾,且每次仅售出一包纸巾。纸巾售卖机的状态图如图5-1所示。 采用状态(State)模式来实现该纸巾售卖机,得到如图5-2所示的类图。其中类
阅读下列说明和C++代码。 [说明] 某大型商场内安装了多个简易的纸巾售卖机,自动出售2元钱一包的纸巾,且每次仅售出一包纸巾。纸巾售卖机的状态图如图5-1所示。 采用状态(State)模式来实现该纸巾售卖机,得到如图5-2所示的类图。其中类
admin
2012-03-21
55
问题
阅读下列说明和C++代码。
[说明]
某大型商场内安装了多个简易的纸巾售卖机,自动出售2元钱一包的纸巾,且每次仅售出一包纸巾。纸巾售卖机的状态图如图5-1所示。
采用状态(State)模式来实现该纸巾售卖机,得到如图5-2所示的类图。其中类State为抽象类,定义了投币、退币、出纸巾等方法接口。类SoldState、SoldOutState、NoQuarterState和HasQuarterState分别对应图5-1中纸巾售卖机的4种状态:售出纸巾、纸巾售完、没有投币、有2元钱。
[C++代码]
#include <iostream>
using namespace std;
//以下为类的定义部分
class TissueMachine; //类的提前引用
class State {
public:
virtual void insertQuarter()=0; //投币
virtual void ejectQuarter()=0; //退币
virtual void turnCrank()=0; //按下“出纸巾”按钮
virtual void dispense()=0; //出纸巾
};
/*类SoldOutState、NoQuarterState、HasQuarterState、SoldState的定义省略,
每个类中均定义了私有数据成员TissueMachine* tissueMachine;*/
class TissueMachine {
private:
(1) *soldOutState, *noQuarterState, *hasQuarterState,*soldState,
*state;
int count; //纸巾数
public:
TissueMachine (int numbers);
void setState (State* state);
State* getHasQuarterState();
State* getNoQuarterState()j
State* getSoldState();
State* getSoldOutState();
int getCount()j
//其余代码省略
};
//以下为类的实现部分
void NoQuarterState ::insertQuarter() {
tissueMachine->setState( (2) );
}
void HasQuarterState ::ejectQuarter() {
tissueMachine->setState( (3) );
}
void SoldState ::dispense() {
if (tissueMachine->getCount()>0) {
tissueMachine->setState( (4) );
}
else {
tissueMachine->setState( (5) );
}
} //其余代码省略
(5)
选项
答案
tissueMachine->getSoldoutState()
解析
本题考查状态(State)模式的概念及应用。
状态模式是一种对象的行为型模式,允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。状态模式的类图如下所示:
状态模式主要解决的是控制一个对象转换的条件表达式过于复杂的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。状态模式的好处是将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。
题目利用状态模式来实现一个简易的纸巾售卖机。售卖机的状态转换图已经在题目中给出,类S01dState、SoldoutState、NoQuarterState和HasQuaerState分别用来表示售卖机的4种不同状态,对应于状态模式中的ConcreteState1,...ConcreteStateN。题目所设置的填空,主要集中在状态转换上。因此解答该题时,要求在理解状态模式内涵的基础上,依据纸巾售卖机的状态转换原则,给出正确的状态设置。
空(1)出现在类TissueMachine的数据成员定义部分。状态模式封装了状态的转换过程,但是它需要枚举可能的状态,因此需要确定状态种类。因此在类TissueMachine中需定义出所有可能的状态对象。根据所给出的对象名称及说明中的描述,可知(1)处应填入的类名为State。
空(2)~(5)都是与状态转换相关的,要求填写类TissueMachine中的方法setState在不同调用处的实际参数。根据方法的名称及调用方式,可以推断出这个方法的功能就是设置自动售卖机的当前状态。要填出这些空,只要对照图5.1的状态转换图,根据状态转换的条件确定出当前状态及下一状态即可。
空(2)出现在方法insertQuaner内,即给纸巾售卖机投入2元钱。根据状态图,“投入2元钱”之后,售卖机应转换到“有2元钱”的状态。“有2元钱”对应的状态的类为“HasQuanerState”,所以空(2)处应填类HasQuanerState的对象。由于hasQuanerState是类TissueMachine的私有数据成员,不能直接访问,所以只能通过调用相关的get方法来获取该对象。由此得出(2)应填tissueMachine->getHasQuarterState();
同理,空(3)表示的状态是从“有2元钱”状态,经历“退回2元钱”事件之后的状态,及“没有投币”状态。所以空(3)处应填tissueMachine->getNoQuanerState()。
空(4)和(5)处分别表示卖出一包纸巾之后,售卖机应该转换到的下一个状态。这个跟售卖机中的纸巾数有关,如果还有纸巾,则转换到“没有投币”状态,如果没有纸巾了,则转换到“纸巾售完”状态,因此,空(4)处应填tissueMachine->getNoQuarterState(),空(5)处应填tissueMachine->getSoldOutState()。
转载请注明原文地址:https://kaotiyun.com/show/LeDZ777K
本试题收录于:
软件设计师下午应用技术考试题库软考中级分类
0
软件设计师下午应用技术考试
软考中级
相关试题推荐
测试成本控制的目标是使测试开发成本、测试实施成本和测试维护成本最小化,以下理解正确的是______。A.测试准备成本属于测试实施成本B.可以通过加强软件测试的配置管理来降低测试维护成本C.测试设计成本控制的目标是尽可能地减少测试总执行时间和所需的测试
函数t()、f()的定义如下所示。若调用函数t()时传递给x的值为3,并且调用函数f()时,第一个参数采用传值(call by value)方式,第二个参数采用传引用(call by reference)方式,则函数t0的返回值为(33).
关于原型化开发方法的叙述中,不正确的是(20)。
某汽车维修公司有部门、员工和顾客等实体,各实体对应的关系模式如下:部门(部门代码,部门名称,电话)员工(员工代码,姓名,部门代码)顾客(顾客号,姓名,年龄,性别)维修(顾客号,故障情况,维修日期,员工代码)假设每个部门允许有多部电话,则电话属性为
以下关于结构化开发方法的叙述中,不正确的是()。
功能测试执行过后一般可以确认系统的功能缺陷,缺陷的类型包括(37)。①功能不满足隐性需求②功能实现不正确③功能不符合相关的法律法规④功能易用性不好
能够主动采集信息,分析网络攻击行为和误操作的实时保护策略是指(64)。
错误管理的流程可以概括为:测试人员提交新的错误入库,错误状态为1,高级测试人员验证错误,如果确认是错误,分配给相应的开发人员,设置状态为2,如果不是错误,则拒绝,设置为“拒绝”状态:开发人员查询状态为3的错误,做如下处理:如果不是错误,则置状态为“拒绝”,
以下不属于在需求分析阶段编写的文档是
填充流程图中①的判断条件。写出子程序A的功能,并顺序写出实现该功能的操作
随机试题
患者,男,20岁。头部被木棒击伤后昏迷12分钟,清醒后诉头痛并呕吐1次。入院后,若患者出现急性颅内压增高,伴随其出现的生命体征应是
不属于《商业银行风险监管核心指标》包含的三个层次的是()。
某市甲公司于2017年9月1日设立,当年9月份发生以下业务:(1)9月10日甲公司的财务人员持有关证件到A银行营业部办理基本存款账户的开立手续,A银行工作人员审查了其开户的证明文件,并留存了相关证件的复印件,为其办理了基本存款账户的开户手续(隔日
指挥的手势是指挥工作的核心,两手的基本分工是()。
Peer-editingduringclassisanimportantstepofthe______approachtoteachingwriting.
公安机关的专政职能的实质是公安机关代表国家和人民对()实行政治统治。
中国消费者对轿车的了解和要求已经有了很大的变化,他们的价值观念以及对汽车理解的变化都会左右其购车意向。在对多个购车指标的调查中,我们发现,大家不再强调某个单一指标,但安全性能依然是消费者购买轿车最关心的指标,关注程度在我们的调查中占8.6%;其次关注的是轿
求下列幂级数的收敛域及其和函数:
Whatiscustomers’attitudetowardsthefollowingservices?Writethecorrectletter,A,BorC,nexttoquestions11-16.AThey
DearMs.Wang,IwanttoapplyforthepositionofpublicrelationswriterwhichwasadvertisedinChinaDaily.Having
最新回复
(
0
)