现在要开发一个系统,管理对多种汽车的收费工作。 给出下面的一个基类框架
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,表示输入的结束。 要求输出各车的编号和收费。
(PS:未使用 Vehicle *pv[10]; )
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 5 class Vehicle 6 { 7 protected: 8 string NO;//编号 9 public: 10 virtual void display()=0;//输出应收费用 11 virtual ~Vehicle(){}; 12 }; 13 14 class Car:public Vehicle 15 { 16 int number,weight; 17 public: 18 Car(){}; 19 friend istream& operator >> (istream &input,Car &C); //重载输入流 20 void display(); 21 }; 22 23 istream& operator >> (istream &input,Car &C) 24 { 25 input>>C.NO>>C.number>>C.weight; 26 return input; 27 } 28 29 void Car::display() 30 { 31 cout<<NO<<" "<<number*8+weight*2<<endl; 32 } 33 34 class Truck:public Vehicle 35 { 36 int weight; 37 public: 38 Truck(){}; 39 friend istream& operator >> (istream &input,Truck &T); 40 void display(); 41 }; 42 43 istream& operator >> (istream &input,Truck &T) 44 { 45 input>>T.NO>>T.weight; 46 return input; 47 } 48 49 void Truck::display() 50 { 51 cout<<NO<<" "<<weight*5<<endl; 52 } 53 54 class Bus:public Vehicle 55 { 56 int number; 57 public: 58 Bus(){}; 59 friend istream& operator >> (istream &input,Bus &B); 60 void display(); 61 }; 62 63 istream& operator >> (istream &input,Bus &B) 64 { 65 input>>B.NO>>B.number; 66 return input; 67 } 68 69 void Bus::display() 70 { 71 cout<<NO<<" "<<number*3<<endl; 72 } 73 74 int main() 75 { 76 int flag; 77 while(cin>>flag,flag) 78 { 79 switch(flag) 80 { 81 case 1: 82 { 83 Car *p=new Car; 84 cin>>*p; 85 p->display(); 86 delete p; 87 break; 88 } 89 case 2: 90 { 91 Truck *p=new Truck; 92 cin>>*p; 93 p->display(); 94 delete p; 95 break; 96 } 97 case 3: 98 { 99 Bus *p=new Bus; 100 cin>>*p; 101 p->display(); 102 delete p; 103 break; 104 } 105 } 106 } 107 return 0; 108 }