现在要开发一个系统,管理对多种汽车的收费工作。 给出下面的一个基类框架 class Vehicle { protected: string NO;//编号 public: virtual void display()=0;//输出应收费用 } 以Vehicle为基类,构建出Car、Truck和Bus三个类。 Car的收费公式为: 载客数8+重量2 Truck的收费公式为:重量5 Bus的收费公式为: 载客数3 生成上述类并编写主函数,要求主函数中有一个基类Vehicle指针数组,数组元素不超过10个。 Vehicle *pv[10]; 主函数根据输入的信息,相应建立Car,Truck或Bus类对象,对于Car给出载客数和重量,Truck给出重量,Bus给出载客数。假设载客数和重量均为整数 输入格式:每个测试用例占一行,每行给出汽车的基本信息,每一个为当前汽车的类型1为car,2为Truck,3为Bus。接下来为它的编号,接下来Car是载客数和重量,Truck给出重量,Bus给出载客数。最后一行为0,表示输入的结束。 要求输出各车的编号和收费。 提示:应用虚函数实现多态
时间: 2024-02-24 07:00:10 浏览: 138
好的,我明白了你的问题。以下是我给出的代码示例:
```cpp
#include <iostream>
#include <string>
using namespace std;
class Vehicle {
protected:
string NO; // 编号
public:
virtual void display() = 0; // 输出应收费用
};
class Car : public Vehicle {
private:
int passengerNum; // 载客数
int weight; // 重量
public:
Car(string no, int n, int w): passengerNum(n), weight(w) {
NO = no;
}
void display() {
cout << NO << " " << passengerNum * 8 + weight * 2 << endl;
}
};
class Truck : public Vehicle {
private:
int weight; // 重量
public:
Truck(string no, int w): weight(w) {
NO = no;
}
void display() {
cout << NO << " " << weight * 5 << endl;
}
};
class Bus : public Vehicle {
private:
int passengerNum; // 载客数
public:
Bus(string no, int n): passengerNum(n) {
NO = no;
}
void display() {
cout << NO << " " << passengerNum * 3 << endl;
}
};
int main() {
Vehicle *pv[10];
int type, passengerNum, weight;
string no;
int i = 0;
while (true) {
cin >> type;
if (type == 0) break;
cin >> no;
switch(type) {
case 1:
cin >> passengerNum >> weight;
pv[i] = new Car(no, passengerNum, weight);
break;
case 2:
cin >> weight;
pv[i] = new Truck(no, weight);
break;
case 3:
cin >> passengerNum;
pv[i] = new Bus(no, passengerNum);
break;
}
i++;
}
for (int j = 0; j < i; j++) {
pv[j]->display();
delete pv[j];
}
return 0;
}
```
注释已经很详细了,这里简单介绍一下。我们定义了三个子类 Car、Truck 和 Bus,它们都继承自基类 Vehicle。同时,这三个子类都重写了基类的 display 函数,根据不同的收费公式输出应收费用。在主函数中,我们根据输入的信息创建相应的子类对象,并将它们存储在基类指针数组中。最后,我们遍历数组,调用每个对象的 display 函数输出收费信息,并释放对象所占用的内存。
阅读全文