//一个很不错的C++类的练习题目
1.定义一个C++枚举(作为枚举结构),有以下四个值:一次、每天、每周、每月。
为这个枚举定义一个重载的输出操作符<<,根据枚举值,它将每日、每周、每月和其他任何事情都写到作为参数传递的字符输出流参考上。
此外,为枚举值定义一个重载的输入操作符>>(也见下面的例子)。
2.定义一个名为CO2Emission的抽象类,其成员如下。
命名为下一个的私人指针属性,以建立一个二氧化碳排放的列表。
公共标准构造函数,将指针属性初始化为一个C++的空指针。
公共虚拟析构器将 "destructor CO2Emission: done "写入标准字符输出流中。
名为get_next的公共成员函数,不带参数,返回指针属性的值。
名为set_next的公共成员函数,以一个CO2Emission类型的指针为参数,将指针属性的值设置为参数值。
名为get_co2的公共纯虚拟成员函数没有参数,并以浮点数作为返回值,必须在派生类中实现。
公共的纯虚拟成员函数名为print,没有参数也没有返回,必须在派生类中实现。
3.定义一个名为 "运输 "的抽象类,该类公开继承自CO2Emission,其成员如下。
命名为km的私有属性,类型为浮点数,用于驱动的公里数。
名为frequency的私有属性,属于上述定义的枚举类型Frequency,即运输发生的频率。
公共标准构造函数,在其主体中,如下面的例子,上层标准构造函数所走的公里数的值和频率(通过上述定义的输入运算符)应从标准字符输入流中读取并存储在两个属性中。
带有两个参数的公共构造函数,用于用参数值初始化两个属性--频率的参数应是一个默认参数,默认值来自上面定义的枚举数据类型Frequency。
公共的虚拟析构器,就像下面的例子中写的那样" destructor Transport:"、频率、旅行距离值和 "km done "到标准字符输出流。
命名为get_co2_pkm的私有成员函数没有参数,并以浮点数作为返回值,必须在派生类中实现。
名为get_co2的公共成员函数,没有参数,以一个浮点数作为返回。在该函数中,应计算并返回驾驶公里数和一公里的各自排放值(通过调用先前定义的成员函数)与代表频率的数字(一次=>1,每天=>365,每周=>52,每月=>12)的乘积。
公共成员函数,名称为print,无参数,无返回。在正文中,如下面的例子,字符串 "运输 "和频率(通过上述定义的输出运算符)应被写入标准字符输出流,驾驶的公里数(小数点后一位),圆括号中的每人公里的二氧化碳排放值(小数点后三位)和计算的二氧化碳排放量(适当地调用前面的成员函数)。
4.修改你的类,命名为Bus,并从Transport类公开派生。删除属性km和成员函数get_co2。修改两个构造函数,分别调用超类的构造函数,使其功能保持不变。同时修改成员函数print,使其在输出 "本地公交 "或 "长途公交"(取决于布尔属性的值)后调用直接超类的函数print。添加一个公共的虚拟析构器,输出" destructor Bus: " 并调用函数print(见下面的例子)。
5.修改你的名为Car的类,并从Transport类公开派生出来。删除属性km和成员函数get_co2。修改两个构造函数,分别调用超类的构造函数,使其功能保持不变。同时修改成员函数print,使其在输出 "客车 "后调用直接超类的函数print。添加一个公共的虚拟析构器,输出" destructor Car:"并调用函数print(见下面的例子)。
6.修改你的名为Flight的类,并从Transport类公开派生。删除属性km和成员函数get_co2。修改两个构造函数,分别调用超类的构造函数,使其功能保持不变。同时修改成员函数print,使其在输出 "flight "后调用直接超类的函数print。添加一个公共的虚拟析构器,输出 "destructor Flight: done",如下面的例子所示。
7.修改你的类,命名为Train,并从Transport类公开派生。删除属性km。修改两个构造函数,分别调用超类的构造函数,使其功能保持不变。修改成员函数get_co2,使其调用超类的相同函数,并且在计算中仍然考虑单程或回程的情况。同时修改成员函数print,使其在输出 "单程 "或 "回程 "以及 "本地火车 "或 "长途火车 "后调用直接超类的函数print。添加一个公共的虚拟析构器,输出" destructor Train:"并调用函数print(见下面的例子)。
8.修改你的类,命名为Cruise,并从CO2Emission类公开派生。在构造函数中,调用超类的标准构造函数,并为该类添加一个公共的虚拟析构函数,输出 "destructor Cruise:"并调用函数print(见下面的例子)。
9.定义一个名为CO2Footprint的类,其成员如下。
命名为 "姓名 "的私有属性,类型为C++字符串,碳足迹被分配给谁。
私有指针属性,名为排放,用于指向二氧化碳排放列表的头部。
公共构造函数,将名称初始化为参数的值,将指针属性初始化为C++的空指针。
公共析构器将 "destructor for CO2Footprint for"、名称和 "started... "写入标准字符输出流,然后在一个循环中逐一删除堆上的所有列表项,最后将 "destructor CO2Foodprint done "写入标准字符输出流(见下例)。
名为get_name的公共成员函数,不带参数,返回相同的命名属性的值。
公共成员函数名为add,以CO2Emission类型的指针为参数,将指向的对象插入碳排放列表的头部。
名为get_sum_co2的公共成员函数没有参数,以浮点数作为返回值。在正文中,所有列表元素的碳排放量将被加起来,并返回这个和值。
公共成员函数名为print,没有参数也没有返回。在正文中,名称应在字符串 "CO2 FOODPRINT FOR:",打印信息将被发送到列表中的所有对象,然后计算所有二氧化碳排放量的总和,并在 "TOTAL CO2 EMISSIONS. "之后写入标准字符输出流。",单位为公斤和吨,每个单位有1位小数(见下面的例子)。
10.对函数main修改如下。
删除所有的东西,除了五个指针变量b2、c2、h2、f2、t2的定义和它们指向堆中新对象的初始化。
定义一个C++字符串类型的变量,在用户指导下从标准字符输入流中读入一个名字后,用这个名字定义并初始化一个CO2Footprint类型的对象f(不是指针*f)(见下面例子)。
向对象f发送一条消息add,并将指针b2, c2, h2, f2, t2作为参数。
编写一个小菜单,其菜单项如下面的例子所示。对于每个定义的非抽象二氧化碳排放子类,应使用标准构造函数在堆上创建一个新对象,并添加到二氧化碳足迹对象f中。
如果程序结束,C++运行系统会自动调用对象f的析构器,删除碳排放列表中的所有对象,从而触发析构器的输出,如下例所示。
CO2 footprint for? Dilbert
CO2 footprint input for Dilbert
(e) end
(b) bus transport
(c) car transport
(f) flight tranport
(h) holiday cruise
(t) train transport
(p) print all
>> p
CO2 FOODPRINT FOR: Dilbert
return long distance train transport 628.8 km (0.035 kg CO2/pkm) 44.0 kg CO2
flight transport 2669.9 km (0.270 kg CO2/pkm) 720.9 kg CO2
cruise holiday (without flights): 14 days duration with 3 sea days (sea day 280.000 kg CO2/pkm, harbour day 190.000 kg CO2/pkm) 2930.0 kg CO2
passenger car transport 5500.0 km (0.172 kg CO2/pkm) 948.8 kg CO2
local bus transport 2200.0 km (0.111 kg CO2/pkm) 244.2 kg CO2
TOTAL CO2 EMISSIONS: 4887.8 kg = 4.9 tons
CO2 footprint input for Dilbert
(e) end
(b) bus transport
(c) car transport
(f) flight tranport
(h) holiday cruise
(t) train transport
(p) print all
>> b
transport distance kilometers: 1000
frequency input:
(o) once
(d) daily
(m) monthly
(w) weekly
your choice: m
(1) local transport bus
(2) long distance bus
your choice: 2
CO2 footprint input for Dilbert
(e) end
(b) bus transport
(c) car transport
(f) flight tranport
(h) holiday cruise
(t) train transport
(p) print all
>> p
CO2 FOODPRINT FOR: Dilbert
long distance bus transport monthly 1000.0 km (0.036 kg CO2/pkm) 432.0 kg CO2
return long distance train transport 628.8 km (0.035 kg CO2/pkm) 44.0 kg CO2
flight transport 2669.9 km (0.270 kg CO2/pkm) 720.9 kg CO2
cruise holiday (without flights): 14 days duration with 3 sea days (sea day 280.000 kg CO2/pkm, harbour day 190.000 kg CO2/pkm) 2930.0 kg CO2
passenger car transport 5500.0 km (0.172 kg CO2/pkm) 948.8 kg CO2
local bus transport 2200.0 km (0.111 kg CO2/pkm) 244.2 kg CO2
TOTAL CO2 EMISSIONS: 5319.8 kg = 5.3 tons
CO2 footprint input for Dilbert
(e) end
(b) bus transport
(c) car transport
(f) flight tranport
(h) holiday cruise
(t) train transport
(p) print all
>> c
transport distance kilometers: 1000
frequency input:
(o) once
(d) daily
(m) monthly
(w) weekly
your choice: w
passenger car consumption liter petrol per 100 kilometers: 10
CO2 footprint input for Dilbert
(e) end
(b) bus transport
(c) car transport
(f) flight tranport
(h) holiday cruise
(t) train transport
(p) print all
>> p
CO2 FOODPRINT FOR: Dilbert
passenger car transport weekly 1000.0 km (0.230 kg CO2/pkm) 11960.0 kg CO2
long distance bus transport monthly 1000.0 km (0.036 kg CO2/pkm) 432.0 kg CO2
return long distance train transport 628.8 km (0.035 kg CO2/pkm) 44.0 kg CO2
flight transport 2669.9 km (0.270 kg CO2/pkm) 720.9 kg CO2
cruise holiday (without flights): 14 days duration with 3 sea days (sea day 280.000 kg CO2/pkm, harbour day 190.000 kg CO2/pkm) 2930.0 kg CO2
passenger car transport 5500.0 km (0.172 kg CO2/pkm) 948.8 kg CO2
local bus transport 2200.0 km (0.111 kg CO2/pkm) 244.2 kg CO2
TOTAL CO2 EMISSIONS: 17279.8 kg = 17.3 tons
CO2 footprint input for Dilbert
(e) end
(b) bus transport
(c) car transport
(f) flight tranport
(h) holiday cruise
(t) train transport
(p) print all
>> f
transport distance kilometers: 1000
frequency input:
(o) once
(d) daily
(m) monthly
(w) weekly
your choice: o
CO2 footprint input for Dilbert
(e) end
(b) bus transport
(c) car transport
(f) flight tranport
(h) holiday cruise
(t) train transport
(p) print all
>> p
CO2 FOODPRINT FOR: Dilbert
flight transport 1000.0 km (0.270 kg CO2/pkm) 270.0 kg CO2
passenger car transport weekly 1000.0 km (0.230 kg CO2/pkm) 11960.0 kg CO2
long distance bus transport monthly 1000.0 km (0.036 kg CO2/pkm) 432.0 kg CO2
return long distance train transport 628.8 km (0.035 kg CO2/pkm) 44.0 kg CO2
flight transport 2669.9 km (0.270 kg CO2/pkm) 720.9 kg CO2
cruise holiday (without flights): 14 days duration with 3 sea days (sea day 280.000 kg CO2/pkm, harbour day 190.000 kg CO2/pkm) 2930.0 kg CO2
passenger car transport 5500.0 km (0.172 kg CO2/pkm) 948.8 kg CO2
local bus transport 2200.0 km (0.111 kg CO2/pkm) 244.2 kg CO2
TOTAL CO2 EMISSIONS: 17549.8 kg = 17.5 tons
CO2 footprint input for Dilbert
(e) end
(b) bus transport
(c) car transport
(f) flight tranport
(h) holiday cruise
(t) train transport
(p) print all
>> h
cruise holiday data input:
number of days of the whole cruise: 3
number of sea days: 1
CO2 footprint input for Dilbert
(e) end
(b) bus transport
(c) car transport
(f) flight tranport
(h) holiday cruise
(t) train transport
(p) print all
>> p
CO2 FOODPRINT FOR: Dilbert
cruise holiday (without flights): 3 days duration with 1 sea days (sea day 280.000 kg CO2/pkm, harbour day 190.000 kg CO2/pkm) 660.0 kg CO2
flight transport 1000.0 km (0.270 kg CO2/pkm) 270.0 kg CO2
passenger car transport weekly 1000.0 km (0.230 kg CO2/pkm) 11960.0 kg CO2
long distance bus transport monthly 1000.0 km (0.036 kg CO2/pkm) 432.0 kg CO2
return long distance train transport 628.8 km (0.035 kg CO2/pkm) 44.0 kg CO2
flight transport 2669.9 km (0.270 kg CO2/pkm) 720.9 kg CO2
cruise holiday (without flights): 14 days duration with 3 sea days (sea day 280.000 kg CO2/pkm, harbour day 190.000 kg CO2/pkm) 2930.0 kg CO2
passenger car transport 5500.0 km (0.172 kg CO2/pkm) 948.8 kg CO2
local bus transport 2200.0 km (0.111 kg CO2/pkm) 244.2 kg CO2
TOTAL CO2 EMISSIONS: 18209.8 kg = 18.2 tons
CO2 footprint input for Dilbert
(e) end
(b) bus transport
(c) car transport
(f) flight tranport
(h) holiday cruise
(t) train transport
(p) print all
>> t
transport distance kilometers: 10
frequency input:
(o) once
(d) daily
(m) monthly
(w) weekly
your choice: d
(1) local transport train
(2) long distance train
your choice: 1
(1) one-way
(2) return
your choice: 1
CO2 footprint input for Dilbert
(e) end
(b) bus transport
(c) car transport
(f) flight tranport
(h) holiday cruise
(t) train transport
(p) print all
>> p
CO2 FOODPRINT FOR: Dilbert
one way local train transport daily 10.0 km (0.085 kg CO2/pkm) 310.2 kg CO2
cruise holiday (without flights): 3 days duration with 1 sea days (sea day 280.000 kg CO2/pkm, harbour day 190.000 kg CO2/pkm) 660.0 kg CO2
flight transport 1000.0 km (0.270 kg CO2/pkm) 270.0 kg CO2
passenger car transport weekly 1000.0 km (0.230 kg CO2/pkm) 11960.0 kg CO2
long distance bus transport monthly 1000.0 km (0.036 kg CO2/pkm) 432.0 kg CO2
return long distance train transport 628.8 km (0.035 kg CO2/pkm) 44.0 kg CO2
flight transport 2669.9 km (0.270 kg CO2/pkm) 720.9 kg CO2
cruise holiday (without flights): 14 days duration with 3 sea days (sea day 280.000 kg CO2/pkm, harbour day 190.000 kg CO2/pkm) 2930.0 kg CO2
passenger car transport 5500.0 km (0.172 kg CO2/pkm) 948.8 kg CO2
local bus transport 2200.0 km (0.111 kg CO2/pkm) 244.2 kg CO2
TOTAL CO2 EMISSIONS: 18520.1 kg = 18.5 tons
CO2 footprint input for Dilbert
(e) end
(b) bus transport
(c) car transport
(f) flight tranport
(h) holiday cruise
(t) train transport
(p) print all
>> e
destructor CO2Foodprint: for Dilbert started...
destructor Train: one way local train transport daily 10.0 km (0.085 kg CO2/pkm) 310.2 kg CO2
destructor Transport: daily 10.0 km done
destructor CO2Emission: done
destructor Cruise: cruise holiday (without flights): 3 days duration with 1 sea days (sea day 280.000 kg CO2/pkm, harbour day 190.000 kg CO2/pkm) 660.0 kg CO2
destructor CO2Emission: done
destructor Flight: done
destructor Transport: 1000.0 km done
destructor CO2Emission: done
destructor Car: passenger car transport weekly 1000.0 km (0.230 kg CO2/pkm) 11960.0 kg CO2
destructor Transport: weekly 1000.0 km done
destructor CO2Emission: done
destructor Bus: long distance bus transport monthly 1000.0 km (0.036 kg CO2/pkm) 432.0 kg CO2
destructor Transport: monthly 1000.0 km done
destructor CO2Emission: done
destructor Train: return long distance train transport 628.8 km (0.035 kg CO2/pkm) 44.0 kg CO2
destructor Transport: 628.8 km done
destructor CO2Emission: done
destructor Flight: done
destructor Transport: 2669.9 km done
destructor CO2Emission: done
destructor Cruise: cruise holiday (without flights): 14 days duration with 3 sea days (sea day 280.000 kg CO2/pkm, harbour day 190.000 kg CO2/pkm) 2930.0 kg CO2
destructor CO2Emission: done
destructor Car: passenger car transport 5500.0 km (0.172 kg CO2/pkm) 948.8 kg CO2
destructor Transport: 5500.0 km done
destructor CO2Emission: done
destructor Bus: local bus transport 2200.0 km (0.111 kg CO2/pkm) 244.2 kg CO2
destructor Transport: 2200.0 km done
destructor CO2Emission: done
destructor CO2Foodprint: done