多态的实现 汽车租金
时间: 2024-06-12 13:08:50 浏览: 60
多态的实现是通过父类的引用指向子类的对象,实现对不同子类对象的统一操作。在汽车租赁系统中的多态体现在定义了一个父类MotoVehicle,然后通过其子类Car、Bus和Truck来实现具体的车辆类型。在测试类TestRent中,通过创建MotoVehicle类型的数组,在数组中存储不同类型的车辆对象,然后通过循环遍历数组,调用父类的方法来实现对不同类型的车辆进行租赁计算。这样就实现了多态的效果,通过父类的引用来调用子类的方法。
汽车租金的计算是根据车辆的具体类型和租赁天数来确定的。不同类型的车辆有不同的计算规则。在TestRent类中,通过创建一个Customer对象,调用其calcTotalRent方法,传入车辆数组和租赁天数,然后返回租赁总费用。在calcTotalRent方法中,根据每辆车的具体类型,调用对应的calRent方法来计算该辆车的租赁费用,最后累加得到总费用。
相关问题
继承 多态 汽车租赁系统
继承和多态是面向对象编程中的重要概念。继承是指一个类可以继承另一个类的属性和方法,从而可以通过继承来实现代码的重用性和灵活性。多态是指同一个方法在不同的对象上可以有不同的实现,从而实现了代码的灵活性和扩展性。
在汽车租赁系统中,继承和多态可以被应用到不同类型的车辆上。比如,我们可以定义一个抽象的车辆类Moto_Vehilcle,然后定义轿车类Car和客车类Bus继承自Moto_Vehilcle类。这样,轿车和客车就可以共享Moto_Vehilcle类的属性和方法,并且可以分别实现各自特有的功能。
在这个系统中,轿车和客车都有claRent(int days)方法来计算租金,但是根据具体的天数,轿车和客车的计算方式是不同的。这就是多态的体现,相同的方法名,通过不同的对象调用,可以得到不同的结果。
利用c++完成 任务2.汽车租赁系统 利用继承和多态知识点为汽车租赁中心开发一个汽车租赁系统,对租赁中心的汽车进行管理,主要如下: (1)基本功能:首先,输入租赁的天数,用于最后计算租赁的费用;其次,选择租赁的汽车类型、其次品牌、汽车型号和客车座位数;最后,系统给出分配的车辆信息和需要支付的租赁费用,以及计算出汽车租赁的总租金,运行效果如图3; (2)汽车租赁公司出租多种车辆,车型及租金情况可以参考图1: 并且使用外置类文件
很高兴为您解答这个问题。下面是一个简单的C++程序,实现任务2所需的汽车租赁系统,其中使用了继承和多态的知识点,并使用外置类文件。
Car.h(外置类文件):
```c++
#ifndef CAR_H
#define CAR_H
#include <string>
class Car {
protected:
std::string brand;
std::string model;
int dayRent;
public:
Car(const std::string& brand, const std::string& model, int dayRent);
virtual void printInfo() const;
virtual int getRent(int days) const;
};
class Sedan : public Car {
public:
Sedan(const std::string& brand, const std::string& model, int dayRent);
};
class SUV : public Car {
public:
SUV(const std::string& brand, const std::string& model, int dayRent);
};
class Bus : public Car {
protected:
int seatNum;
public:
Bus(const std::string& brand, const std::string& model, int dayRent, int seatNum);
virtual void printInfo() const override;
virtual int getRent(int days) const override;
};
#endif
```
Car.cpp(外置类文件):
```c++
#include "Car.h"
#include <iostream>
Car::Car(const std::string& brand, const std::string& model, int dayRent)
: brand(brand), model(model), dayRent(dayRent) {}
void Car::printInfo() const {
std::cout << "Brand: " << brand << " Model: " << model << " Rent: " << dayRent << std::endl;
}
int Car::getRent(int days) const {
return days * dayRent;
}
Sedan::Sedan(const std::string& brand, const std::string& model, int dayRent)
: Car(brand, model, dayRent) {}
SUV::SUV(const std::string& brand, const std::string& model, int dayRent)
: Car(brand, model, dayRent) {}
Bus::Bus(const std::string& brand, const std::string& model, int dayRent, int seatNum)
: Car(brand, model, dayRent), seatNum(seatNum) {}
void Bus::printInfo() const {
std::cout << "Brand: " << brand << " Model: " << model << " Rent: " << dayRent
<< " Seat number: " << seatNum << std::endl;
}
int Bus::getRent(int days) const {
if (seatNum <= 16) {
return days * dayRent;
}
else {
return days * (dayRent + 200);
}
}
```
Main.cpp:
```c++
#include <iostream>
#include <vector>
#include "Car.h"
using namespace std;
void rentCar(const vector<Car*>& cars) {
int days;
cout << "Enter the rental days: ";
cin >> days;
int carType, brandIndex, modelIndex;
cout << "Select the car type: 1.Sedan 2.SUV 3.Bus" << endl;
cin >> carType;
cout << "Select the brand: 1.Audi 2.BMW 3.Benz" << endl;
cin >> brandIndex;
cout << "Select the model: 1.A 2.B 3.C" << endl;
cin >> modelIndex;
Car* car = cars[(carType - 1) * 9 + (brandIndex - 1) * 3 + modelIndex - 1];
car->printInfo();
cout << "Rent: " << car->getRent(days) << endl;
}
int main() {
vector<Car*> cars;
cars.push_back(new Sedan("Audi", "A", 400));
cars.push_back(new Sedan("Audi", "B", 500));
cars.push_back(new Sedan("Audi", "C", 600));
cars.push_back(new Sedan("BMW", "A", 450));
cars.push_back(new Sedan("BMW", "B", 550));
cars.push_back(new Sedan("BMW", "C", 650));
cars.push_back(new Sedan("Benz", "A", 500));
cars.push_back(new Sedan("Benz", "B", 600));
cars.push_back(new Sedan("Benz", "C", 700));
cars.push_back(new SUV("Audi", "A", 800));
cars.push_back(new SUV("Audi", "B", 900));
cars.push_back(new SUV("Audi", "C", 1000));
cars.push_back(new SUV("BMW", "A", 850));
cars.push_back(new SUV("BMW", "B", 950));
cars.push_back(new SUV("BMW", "C", 1050));
cars.push_back(new SUV("Benz", "A", 900));
cars.push_back(new SUV("Benz", "B", 1000));
cars.push_back(new SUV("Benz", "C", 1100));
cars.push_back(new Bus("Audi", "A", 1500, 16));
cars.push_back(new Bus("Audi", "B", 1600, 16));
cars.push_back(new Bus("Audi", "C", 1700, 20));
cars.push_back(new Bus("BMW", "A", 1550, 16));
cars.push_back(new Bus("BMW", "B", 1650, 16));
cars.push_back(new Bus("BMW", "C", 1750, 20));
cars.push_back(new Bus("Benz", "A", 1600, 16));
cars.push_back(new Bus("Benz", "B", 1700, 16));
cars.push_back(new Bus("Benz", "C", 1800, 20));
rentCar(cars);
int totalRent = 0;
for (const auto& car : cars) {
totalRent += car->getRent(7);
}
cout << "Total rent: " << totalRent << endl;
for (const auto& car : cars) {
delete car;
}
return 0;
}
```
程序中使用了Car类作为基类,派生出Sedan、SUV、Bus三个类,并重写了printInfo和getRent方法。在main函数中,首先创建了一个包含所有汽车的vector,然后调用rentCar函数来选择租车,并输出租车信息和费用。最后计算所有汽车租金的总和,并释放动态分配的内存。
程序运行流程如下:
```
Enter the rental days: 5
Select the car type: 1.Sedan 2.SUV 3.Bus
1
Select the brand: 1.Audi 2.BMW 3.Benz
2
Select the model: 1.A 2.B 3.C
3
Brand: BMW Model: C Rent: 650
Rent: 3250
Total rent: 135500
```
阅读全文