当前位置:首页计算机类软件水平考试初级程序员->阅读下列说明和C++代码,填补代码中的空缺,将解答填入答题纸

阅读下列说明和C++代码,填补代码中的空缺,将解答填入答题纸的对应栏内。

【说明】

以下C++代码实现两类交通工具(Flight和Train)的简单订票处理,类Vehicle、Flight、Train之间的关系如图6-1所示。

初级程序员,章节练习,基础复习,案例分析

【C++代码】

#include <iostream>

#include <vector>

using namespace std;

class Vehicle{

public:

virtual ~Vehicle(){}

void book(int n){ //订n张票

if (getTicket()>=n){

decreaseTicket(n);

} else{

cout<<n<<“余票不足!! ”;

}

}

virtual int getTicket()=0;

virtual void decreaseTicket(int)=0;

};

Class Flight: (1) {

private:

(2) tickets; //Flight的票数

public:

int getTicket();

void decreaseTicket(int);

};

class Train: (3) {

private:

(4) tickets; //Train的票数

public:

int getTicket();

void decreaseTicket(int);

};

int Train::tickets =2016; //初始化Train的票数为2016

int Flight::tickets =216; //初始化Flight的票数为216

int Train::getTicket() { return tickets; }

void Train::decreaseTicket(int n){ tickets=tickets -n;}

int Flight::getTicket () { return tickets; }

void Flight::decreaseTicket(int n) { tickets= tickets - n;}

int main() {

vector<Vehicle*> v;

v.push_back(new Flight());

v.push_back(new Train());

v;push_back(new Flight());

v.push_back(new Tram());

v.push_back(new Train());

cout《"欢迎订票!”《endl:

for (int i= 0; i < v.size(); i++) {

(5) (i+1); //订i+1张票

cout《“剩余票数:”<<(*V[i]). getTicket()<<endl;

}

for (vector<Vehicle*>::iterator it = v.begin(); it != v.end(); it ++) {

if (NULL !=*it) {

delete*it ;

*it = NULL;

}

}

v.clear();

return0;

}

运行该程序时输出如下:

欢迎订票!

剩余票数:215

剩余票数:2014

剩余票数: (6)

剩余票数: (7)

剩余票数: (8)

查看答案 纠错
答案:
本题解析:

(1)public Vehicle

(2)static int

(3)public Vehicle

(4)static int

(5)(*v[i]).book

(6)212

(7)2010

(8)2005

本题考查C++语言程序设计,涉及类、继承、对象、函数的定义和相关操作。要求考生根据给出的案例和代码说明,认真阅读理清程序思路,然后完成题目。

先考查题目说明,实现两类交通工具(Flight和Train)的简单订票处理,根据说明进行设计,题目说明中图6-1的类图给出了类Vehicle、Flight、 Train之间的关系。涉及到交通工具类Vehicle、其子类Flight和Train两类交通工具。简单订票就是针对这两类具体的交通工具,每次订票根据所选订票的交通工具和所需订票数进行操作。

不论哪类交通工具,订票操作book在余票满足条件的情况下将余票减少所定票数,不足时则给出“余票不足”的提示,所在父类Vehicle中定义并实现void book(int n)函数。

每类具体交通工具获取自身类型的票数(getTicket),订票也只减少自身类型票数(decreaseTicket(int n))等类以及相关操作。因此,在父类Vehicle中,分别定义针对上述两个操作的虚函数:

Virtual int getTicket() =0;

Virtual void decreaseTicket(int n)=0;

在C++中,virtual作为虚函数的关键字,“=0;”表示为纯虚函数,包含虚函数的类本身也是虚拟类,而且,虚函数必须由其子类实现。从题目说明给出的类图(图6-1)也可以看出,Vehicle的两种具体类(子类)为Flight和Train。在C++中,子类继承父类“:”,即:

Class 子类名:继承的方式 父类名

考查主控函数main(),需要将Flight和Train类型对象加入模板类型为Vehicle的向量中,因为Flight和Train的实现分别为:

Class Flight : public Vehicle

Class Train : public Vehicle

Flight和Train类中必须实现getTicket和decreaseTicket函数才能进行获取票数和减少余票的操作。因此,在两个类别中都实现了getTicket和decreaseTicket函数

Flight和Train两类具体交通工具的票数需要分别记录,并且每次订票操作需要对总数进行操作,所有需要定义为类变量,同一类的所有对象共享此变量。在C++中,定义类变量的方式是将变量定义为静态变量,即用static关键字修饰。同时分析对票数的使用,getTicket和decreaseTicket两个函数的返回值和参数都用类型int,因此,票数tickets也定义为int。综合上述两个方面知,tickets定义为static int类型。而且在C++中static int类型的变量必须在类外进行初始化,即:

int Train: :tickets=2016; //初始化Train的票数为2016

int Flight: :tickets=2016; //初始化Flight的票数为2016

主函数main()实现了订票系统的简要控制逻辑,其中创建欲进行订票的对象、持有对象的集合、订票逻辑等。定义vector<Vehicle>向量类型变量v,此处采用模板类集合,在v中,可以持有Vehicle类型及其子类的对象指针。Vector<E>向量中的函数push_back(E e)用于给向量的最末端添加元素,采用向量元素下边index获取向量中索引位置为index的元素,即对象指针,size()用以获取向量的元素个数。主控逻辑中创建Flight和Train两个具体类的一些订票请求对象加入v中,因为Flight和Train均为Vehicle的子类型,而且是具体类,所以满足加入元素的要求,故采用new Flight()和 new Train()来创建相应的对象加入V中;然后通过for循环使每个订票请求对象进行订票,并输出剩余票数:

for(in ti=0;i<v.size();i++){

(*v[i]).book(i+1); //订i+1张票

Count<<“s剩余票数:”<<(*v[i].getTicket()<<endl;

}

即从v中取每个对象指针,用其指针的对象调用book函数进行订票操作。V[i]获得v中位置为i的元素,(*V[i])则是Vehicle类型的对象,由于面向对象的多态机制使得不同对象接受同一消息后发生不同的响应,即具体行为由位置为i的对象指针所引用的对象决定。此处无须类型转换,这是因为在父类Vehicle中,已经定义了book函数,并且声明了book所调用的getTicket和decreaseTicket函数接口,子类分别加以实现。另外,在上述getTicket和decreaseTicket两个函数执行时,因为每次操作tickets和static静态类型,所以,每个操作均作用在当前类变量的剩余票数,即具体子类的有唯一一个当前剩余票数,每次操作都是上次对象修改之后的值的基础上继续更新。

在main()函数中,依次新建并加入5个对象,按顺序类型分别为:Flight、Train、Flight、Train、Train,加入v中的index分别为0、1、2、3、4.在for循环中,按顺序获取向量中的对象元素,并进行订票,数量为i+1张,然后输出剩余票数。因此,采用(*v[i]).book(i+1)进行订票,采用(*v[i]).getTicket()获得当前对象元素所属类的剩余票数。其中Flight的剩余票数216-1=215、215-3=212;Train的剩余票数为2016-2=2014、2014-4=2010、2010-5=2005.按对象顺序则为:215、2014、212、2010、2005。

综上所述,空(1)和(3)需要表示基础Vehicle虚类,即public Vehicle;空(2)和(4)需要分别表示Flight和Train中tickets变量为静态整形变量,即static int;空(5)处为调用获取v中对象元素并订票的(*v[i]).book;空(6)为212;空(7)为2010;空(8)为2005。

更新时间:2021-12-02 10:26

你可能感兴趣的试题

单选题

( )is that it provides guidance and direction on how quality will be managed and verified throughout the project.

  • A.Plan Quality Management
  • B.Manage Quality
  • C.Control Quality
  • D.Project Charter
查看答案
单选题

( )the process of determining,documenting,and managing stakeholder needs and requirements to meet Project objectives.

  • A.Plan Scope Management
  • B.Collection Requirements
  • C.Validate Scope
  • D.Control Scope
查看答案
单选题

The information security management system preserves the confidentiality,integrity and availability of information by applying a( ).

  • A.technology management process
  • B.resource management process
  • C.quality management process
  • D.risk management process
查看答案
单选题

( )is a decentralized database,ensure that the data will not be tampered with and forged.

  • A.Artificial intelligence
  • B.Blockchain
  • C.Sensing technology
  • D.Big datA
查看答案
单选题

( )puts computer resources on the web,and must meet the requirements of super capacity,super concurrency,super speed and super security.

  • A.Cloud computing
  • B.Big datA
  • C.Blockchain
  • D.Internet of things
查看答案
单选题

分配甲、乙、丙、丁四个人去完成五项任务。每人完成各项任务时间如表所示。由于任务多于人数,故规定其中有一个人可兼完成两项任务,其余三人每人完成一项。为了花费时间最少,( )应该完成两项任务。

高级信息系统项目管理师,历年真题,2021年下半年《信息系统项目管理师》真题

  • A.甲
  • B.乙
  • C.丙
  • D.丁
查看答案
单选题

已知某公司生产AB两种产品,其中生产1件A产品需要1个单位的甲资源,3个单位的丙资源;生产1件B产品需要2个单位的乙资源和2个单位的丙资源。已知现有甲乙丙三种资源4个单位、12个单位和18个单位。通过市场预测,可知A产品的单位市场利润为2元,B产品的单位市场利润为5元。该公司获得最大的市场利润应生产A产品(68)件,此时(69)资源仍有剩余。

  • A.甲
  • B.乙
  • C.丙
  • D.甲及丙
查看答案
单选题

已知某公司生产AB两种产品,其中生产1件A产品需要1个单位的甲资源,3个单位的丙资源;生产1件B产品需要2个单位的乙资源和2个单位的丙资源。已知现有甲乙丙三种资源4个单位、12个单位和18个单位。通过市场预测,可知A产品的单位市场利润为2元,B产品的单位市场利润为5元。该公司获得最大的市场利润应生产A产品(68)件,此时(69)资源仍有剩余。

  • A.0
  • B.2
  • C.4
  • D.6
查看答案
单选题

某项目2016年投资额12万元,2018年开始取得项目的净收益(产品一原料辅料及公用工程)6万元/年,2018-2021年每年还会产生其他成本(包括人员工资、管理成本、制造成本等)1.1万元/年;増值税0.35万元/年、营业税金及附加0.05万元/年。则该项目的静态投资回收期为(66)年,截止到2021年底该项目的投资收益率是(67)。

  • A.0.25
  • B.0.33
  • C.0.35
  • D.0.6
查看答案
单选题

安全审计的手段主要包括( )。

  • A.①②③
  • B.②③④
  • C.①②④
  • D.①③④
查看答案