问题 问答题

阅读以下说明、图和C++代码,填补c++代码中的空缺(1)~(5),将解答写在答题纸的对应栏内。

【说明】已知某公司主要有两大类耗电资产(Asset):计算机(ComputerAsset)和建筑物(BuildingAsset)。为了节约能源,通过控制各种电源,将可关闭的房灯、计算机显示器等在夜间关闭。为了实现上述需求,设计了如图5-1所示的类图,并用下面的C++代码加以实现。【C++代码】

答案

参考答案:

(1): public ComputerAsset

(2): public ComputerAsset, public PowerSwitchable

(3) PowerSwitchable*

(4) numltems++

(5) new

解析:

本题考查面向对象程序设计及其C++语言实现的能力,涉及类和抽象类、对象、函数和虚函数的定义和相关操作以及继承关系。要求考生根据给出的案例、类图和 执行过程说明,认真阅读理清程序思路,然后完成题目。   先考查针对案例的特定需求,构建类图整体结构。本题中根据类图定义了以下类:BuildingManagement、 Asset、 ComputerAsset、 BuildingAsset、 ComputerCPU、ComputerMoniter、BuildingLight、RoomLights、EmergencyLight和 PowerSwitchable。其中,Asset为抽象类,表示通用资产,作为所有资产类的基类;ComputerAsset表示计算机有关资产、 BuildingAsset表示建筑物有关资产,两者作为Asset的子类,继承了Asset类;ComputerCPU、 ComputerMoniter分别表示计算机CPU和显示器,继承了ComputerAsset。BuildingLight是一种建筑物资产,表示建 筑物内的照明设备,继承了BuildingAsset,而照明设备有RoomLights和EmergencyLight,作为 BuildingLight的子类。由于案例中两大类耗电资产( Asset):计算机(ComputerAsset)和建筑物(Building Asset),可在夜间关闭的房灯( RoomLights)、计算机显示器(ComputerMoniter)属于不同的资产类型,所以将可关闭的资产设计为抽象基类 PowerSwitchable,规定可在夜间关闭电源的物体的开关电源接口,即包含两个纯虚拟( virtual)函数。因此,RoomLights和ComputerMoniter继承了PowerSwitchable。 C++中有不同种类的继承方式,本题目中,ComputerCPU是ComputerAsset的子类,并且在子类的构造函数中,调用父类的构造函数,所 以继承的权限为public。其语法为:public后加父类名,ComputerMonitor是ComputerAsset的子类,而且均是可关闭 的,具有开关电源的相同接口,均继承了PowerSwitchable,并且在子类的构造函数中,调用父类的构造函数,所以继承的权限均为public, 多个父类的继承语法是:public父类名1,public父类名2。 系统中有各类资产,在BuildingManagement中使用Asset通用资产类型数组,用add函数依次为建筑添加资产。由于add函数中对数组 添加元素只有一条语句,需要在下标中完成指明当前添加资产元素的下标,并将下标后移。在goodNight函数中对可关闭的资产进行控制,需要判定其是否 可关闭,也就是资产是否为PowerSwitchable类的子类。通过动态类型转换进行判定,如果资产类型是PowerSwitchable的子类,则 转换后的类型调用相应接口,并绑定到具体对象,执行对象的关闭电源行为。类BuildingManagement中没有定义构造函数,编译器会生成一个缺省的构造函数,采用new关键字进行对象创建。使用完成之后,通过 delete进行释放。   因此空(1)需要表现出公有继承:public ComputerAsset;空(2)处添加继承两个父类,并且权限均为public,即:public ComputerAsset,public PowerSwitchable;空(3)处动态类型转换为抽象类,即PowerSwitchable*;空(4)处完成指明当前添加资产元素的下标,并 将下标后移,即numltems++;空(5)处补充通过使用编译器生成的缺省构造函数创建对象,即应填入"new"。

单项选择题
单项选择题