//Automobile.h #ifndef AUTOMOBILE_H #define AUTOMOBILE_H using namespace std; #include <string> class Park; class Automobile { public: void enter(Park *park); string getName(); void leave(Park *park); Automobile(string name, int payment = 0); protected: string name; int payment; }; #endif // AUTOMOBILE_H //Automobile.cpp #include "Automobile.h" #include "Park.h" #include <string> using namespace std; Automobile::Automobile(string name, int payment): name(name), payment(payment){;} void Automobile::enter(Park *park) { park->assignAutomobile(this); } void Automobile::leave(Park *park) { park->passAutomobile(this, payment); } string Automobile::getName() { return name; } //Park.h #ifndef PARK_H #define PARK_H class Automobile; class Park { public: void showInfo(); Park(int N); ~Park(); void assignAutomobile(Automobile *automobile); void passAutomobile(Automobile *automobile, int payment); private: int income; int num; int maxNum; Automobile **spaces; }; #endif // PARK_H //Park.cpp #include "Park.h" #include "Automobile.h" #include <string> #include <iostream> using namespace std; Park::Park(int N) { income = 0; maxNum = N; num = 0; spaces = new Automobile*[N]; for (int i = 0; i < N; i++) spaces[i] = NULL; } Park::~Park() { delete[] spaces; } void Park::showInfo() { cout << "停车场目前停放了" << num << "辆汽车"; if (num == 0) cout << ","; else { for (int i = 0; i < maxNum; i++) if (spaces[i]) cout << spaces[i]->getName() << ","; } cout << "共收入" << income << "元停车费" << endl; } void Park::assignAutomobile(Automobile *automobile) { if (num == maxNum) cout << "无法为" << automobile->getName() << "分配停车位" << endl; else for (int i = 0; i < maxNum; i++) if (!spaces[i]) { num++; spaces[i] = automobile; cout << automobile->getName() << "进入停车场,分配停车位" << endl; break; } } void Park::passAutomobile(Automobile *automobile, int payment) { for (int i = 0; i < maxNum; i++) if (spaces[i] == automobile) { income += payment; num--; spaces[i] = NULL; cout << automobile->getName() << "离开停车场,缴纳停车费" << payment << "元" << endl; break; } } //Truck.h #ifndef TRUCK_H #define TRUCK_H #include "Automobile.h" #include <string> using namespace std; class Truck: public Automobile { public: Truck(string name, double weight); double getWeight(); int pay(); private: double weight; }; #endif // TRUCK_H //Truck.cpp #include "Truck.h" #include <string> #include <iostream> using namespace std; Truck::Truck(string name, double weight): Automobile(name), weight(weight) { payment = pay(); } double Truck::getWeight() { return weight; } int Truck::pay() { return 3; } //Car.h #ifndef CAR_H #define CAR_H #include "Automobile.h" #include <string> using namespace std; class Car: public Automobile { public: Car(string name, string name1); string getName1(); int pay(); private: string name1; }; #endif // CAR_H //Car.cpp #include "Car.h" #include <string> #include <iostream> using namespace std; Car::Car(string name, string name1): Automobile(name), name1(name1) { payment = pay(); } string Car::getName1() { return name1; } int Car::pay() { return 1; } //Bus.h #ifndef BUS_H #define BUS_H #include "Automobile.h" #include <string> using namespace std; class Bus: public Automobile { public: Bus(string name, int load); int getLoad(); int pay(); private: int load; }; #endif // BUS_H //Bus.cpp #include "Bus.h" #include <string> #include <iostream> using namespace std; Bus::Bus(string name, int load): Automobile(name), load(load) { payment = pay(); } int Bus::getLoad() { return load; } int Bus::pay() { return 2; } //main.cpp #include "Park.h" #include "Automobile.h" #include "Car.h" #include "Truck.h" #include "Bus.h" #include <string> #include <iostream> using namespace std; int main() { int N; cout << "请输入停车位数量:"; cin >> N; Park *park = new Park(N); Car car1("鲁B-12345","奥迪A6"); car1.enter(park); Truck truck("鲁B-23456", 15); truck.enter(park); car1.leave(park); Bus bus("鲁B-34567", 50); bus.enter(park); park->showInfo(); Car car2("鲁B-45678","宝马320"); car2.enter(park); bus.leave(park); truck.leave(park); park->showInfo(); delete park; return 0; }