首页
登录
从业资格
阅读以下说明和C++代码,填充程序中的空缺,将解答填入答题纸的对应栏内。 【说
阅读以下说明和C++代码,填充程序中的空缺,将解答填入答题纸的对应栏内。 【说
免费题库
2022-08-02
71
问题
阅读以下说明和C++代码,填充程序中的空缺,将解答填入答题纸的对应栏内。【说明】某应急交通控制系统(TraficControlSystem)在红灯时控制各类车辆 (Vehicle)的通行,其类图如图5-1所示,在紧急状态下应急车辆在红灯时可通行,其余车辆按正常规则通行。下面的C++代码实现以上设计,请完善其中的空缺。【C++代码】 #include <typeinfo> #include <iostream> using namespace std; class Vehicle { /*抽象基类,车辆*/ public: virtual void run( ) = 0; }; class Emergency { /*抽象基类,可在红灯时通行的接口,函数均为纯虚函数*/ public: (1) = 0; // isEmergent ( )函数接口 (2) = 0; // runRedLight( ) 函数接口 }; class Car: public Vehicle { public: ~Car ( ) { } void run ( ) { /*代码略*/} }; class Truck: public Vehicle { public: ~Truck( ) { } void run ( ) { /*代码略*/ } }; class PoliceCar: (3) { private: bool isEmergency; public: PoliceCar( ) : Car( ) ,Emergency( ){ this->isEmergency = false; } PoliceCar(bool b) : Car( ) ,Emergency( ) { this->isEmergency = b;} ~policeCar ( ) { } bool isEmergent ( ) { return (4) ; } void runRedLight( ) { /*代码略*/ } }; /*类Ambulance、 FireEngine 实现代码略*/ class TraficControlSystern { /*交通控制类*/ private: Vehicle* v[24}; int nurnVeh:cles; /*在构造函数中设置初始值为0*/ public: void control() { //控制在紧急情况下应急车辆红灯通行,其他情况按常规通行 for (int i = 0; i < numVehicles ; i++) { Emergency * ev = dynamic_cast<Emergency*>(v
); if (ev != 0) (5) ->runRedLight () ; else (6) ->run () ; } } void add(Vehicle * vehicle) { v[numVehicles++] = vehicle; / *添加车辆./ void shutDown() { for (int i = 0; i < numVehicles; i++) { delete v
; } } } ; int main( ) { TraficControlSystern. tcs = new TraficControlSystern; tcs->add(new Car( )); tcs->add(new PoliceCar( )); tcs->add(new Ambulance( ));tcs->add(new Ambulance(true)); tcs->add(new FireEngine(true)); tcs->add(new FireEngine( )); tcs->add(new Truck( )); tcs->control( ); tcs->shutDown( ); delete tcs; }
选项
答案
解析
(1) virtual bool isEmergent()
(2)virtual void runRedLight()
(3) public Car,public Emergency
(4)this->isEmergency
(5) ev
(6)v
本题考查 C++语言程序设计的能力,涉及类、对象、函数的定义和相关操作。要求 考生根据给出的案例和执行过程说明,认;王阅读理清程序思路,然后完成题目。
根据题目描述,以交通控制系统(TraficControlSystem)为背景,本题目中涉及的各类车辆和是否应急状态下在红灯时的通行情况。根据说明进行设计,题目给出了类图(图5-1类图所示)。
图中父类Vehicle代表交通工具,设计为抽象类,包含一个方法: run(),表示行驶某一个具体的交通工具对象,行驶的方法由具体子类型完成,所以Vehicle的run()为一个纯虚函数:
virtual void run() = 0;
Car和Truck都继承自Vehicle的两个子类型,所以它们都继承了Vehicle的run()方法,各自行驶方式有所不同,所以都覆盖了vehicle的run()方法,并加以实现:
void run () {/*代码略*/}
Car的两个子类型PoliceCar和Ambulance都继承自Car,从而PoliceCar和Ambu1ance也都继承了Car中的run()方法。Truck的子类FireEngine也继承了Truck中的run()方法。
图中接口Emergency在C++中采用抽象茬类的方法实现,其中约定红灯时通行的相关接口函数为: isEmergent()和runRedLight() ,均为纯虚函数,原型中=0表示纯虚函数,实现由子类完成:
virtual bool isEmergent() = 0;
virtual void runRedLight() = 0;
isEmergent()函数接口约定应急车辆返回自身紧急情况状态,用bool类型的isEmergency 表示: this->isEmergency,其值在紧急情况下为bool值true ,非紧急情况下为bool值 false。runRedLight()函数接口约定应急车辆在红灯时如何通行(isEmergency为剧。则通行,isEmergency为false,和博通车辆一样通行)。 Emergency的子类有PoliceCar 、Abmulance和FireEngine,所以在这三个类中都要实现Emergency中定义的纯虚函数接口。
交通控制类TraficControlSystem对运轩的交通工具进行控制,所有交通工具用Vehicle数组v表示; numVehicles表示交通工具数量; control函数进行控制在紧急情况下应急车辆红灯通行,其他情况按常规通行; add()表示有车辆加入系统,shutDown()在系统关闭时清除每个对象数组元素: delete v[];。Vehicle的子类具体类型有Car、Truck、PoliceCar 、Abmulance和FireEngine,所以飞口数组中对象有这些类型的对象加入v[]时会自动向上转型成为Vehicle类型,而实现了Emergency接口的应急车辆有runRedLight()函数,其他 Car和Truck只有run()函数。因此,用for循环对每个v
,判定是否是Emergency类型,即是否继承了Emergency ,调用时动态绑定每个数组元素的实际类型,需要通过动态类型转换:
Emergency * ev = dynamic_cast<Emergency*>(v
);
如果转换成功,说明是Emergency的子类,实现runRedLight(),可以调用runeRdLight(), 否则调用 run():
if (ev != 0) ev ->runRedLigh '. ();
else v
->run () ;
主控逻辑代码在main函数中实现。初始化TraficControlSystem,用tcs表示,调用tcs的add()函数添加具体的交通工具,这里告自动向上转型成为Vehicle类型,调用control()对各车辆进行控制,调用shutDown()系统关闭,使用完数组对象之后,需要用delete操作进行释放对象,即deletetcs;
因此,空(1)和空(2)需要定义纯盘函数isEmergency()和runRedLight(),原型中=0题目代码中己经给出,所以空(1)和空(2)分别为"virtual bool isEmergent()" 和"virtual void runRedLight()";空(3)需要继承Car和Emergency,即"public Car,public Emergency"; 空(4)要返回应急车辆对象的状态,即"this->isEmergency";空(5)处动态类型转换成功的对象ev; 空(6)处为普通车辆对象v
。
转载请注明原文地址:https://tihaiku.com/congyezige/2426863.html
本试题收录于:
初级程序员题库软件水平考试初中高级分类
初级程序员
软件水平考试初中高级
相关试题推荐
解答服务对象的健康问题,帮助其澄清观念、做出决策的人际传播形式称为A.咨询B.个
程序语言若规定程序中的变量必须先定义(或声明)再引用,则违反此规定的程序在()时
UML是一种()。A.面向对象的程序设计语言 B.面向过程的程序设计语言 C
IE浏览器能够正确解析()代码。A.ASP B.HTML C.JSP D
若程序P经编译并连接后可执行,则()。A.P是正确的程序 B.P中没有语法
若程序中定义了局部变量与全局变量,则()。A.在函数内只能访问局部变量,而不能访
若程序中使用的变量未设置初始值,则()。A.编译时会一定出错 B.运行时一定出
网页中代码"inputtype=textname="foo"size=20
CPU从内存中读取指令时,需要先将程序计数器(PC)的内容输送到()总线上。A.
著作权法中,计算机软件著作权保护的对象是()。A.硬件设备驱动程序 B.计算机
随机试题
______leavestheroomlastoughttoturnoffthelights.A、AnyoneB、ThepersonC、
进行建设项目财务评价时,项目可行的判据是( )。A.财务净现值≤0,投资回收期
实行施工总承包的,由()统一组织编制建设工程生产安全事故应急救援预案。A.总承
定性研究常用的方法有A.观察法、深入访谈法、专题小组讨论法 B.观察法、深入访
高血压诊断标准是在未用抗高血压药物情况下()A.收缩压≥140mmHg或舒张压
商业银行对客户销售阶段应重点调查的方面不包括()。A.销售渠道 B.进货
187,259,448,583,754,()A.847 B.862 C
从国际经验看,各国政府支持农民专业合作社的主要方式有( )。 A.立法
由于房地产的不可移动、不可隐藏、难以变现,所以难以逃避未来制度政策、政局等变化的
关于施工许可证与已确定的施工企业安全生产许可证之间关系的说法,正确的()。
最新回复
(
0
)