继承 多态 汽车租赁系统

时间: 2023-10-28 22:07:02 浏览: 121
继承和多态是面向对象编程中的重要概念。继承是指一个类可以继承另一个类的属性和方法,从而可以通过继承来实现代码的重用性和灵活性。多态是指同一个方法在不同的对象上可以有不同的实现,从而实现了代码的灵活性和扩展性。 在汽车租赁系统中,继承和多态可以被应用到不同类型的车辆上。比如,我们可以定义一个抽象的车辆类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 ```

利用继承和多态知识点为汽车租赁中心开发一个汽车租赁系统,对租赁中心 的汽车进行管理,主要如下: (1)基本功能:首先,输入租赁的天数,用于最后计算租赁的费用;其次, 选择租赁的汽车类型、其次品牌、汽车型号和客车座位数;最后,系统给出分配 的车辆信息和需要支付的租赁费用,以及计算出汽车租赁的总租金,运行效果如 图3; (2)汽车租赁公司出租多种车辆C++

好的,这里是一个基于C++语言的汽车租赁系统设计,使用了继承和多态的知识点: ```cpp #include <iostream> #include <string> #include <vector> using namespace std; // 汽车基类 class Vehicle { public: Vehicle(string plate_num, string brand, string model, double rent) : plate_num_(plate_num), brand_(brand), model_(model), rent_(rent) {} virtual ~Vehicle() {} virtual void printInfo() const = 0; // 纯虚函数,输出车辆信息 double getRent() const { return rent_; } // 获取租金 protected: string plate_num_; // 车牌号 string brand_; // 品牌 string model_; // 型号 double rent_; // 租金 }; // 小轿车类 class Car : public Vehicle { public: Car(string plate_num, string brand, string model, double rent, int seat_num) : Vehicle(plate_num, brand, model, rent), seat_num_(seat_num) {} virtual ~Car() {} virtual void printInfo() const { cout << "车牌号:" << plate_num_ << " 品牌:" << brand_ << " 型号:" << model_ << " 座位数:" << seat_num_ << " 租金:" << rent_ << endl; } private: int seat_num_; // 座位数 }; // 客车类 class Bus : public Vehicle { public: Bus(string plate_num, string brand, string model, double rent, int seat_num) : Vehicle(plate_num, brand, model, rent), seat_num_(seat_num) {} virtual ~Bus() {} virtual void printInfo() const { cout << "车牌号:" << plate_num_ << " 品牌:" << brand_ << " 型号:" << model_ << " 座位数:" << seat_num_ << " 租金:" << rent_ << endl; } private: int seat_num_; // 座位数 }; // 货车类 class Truck : public Vehicle { public: Truck(string plate_num, string brand, string model, double rent, double load) : Vehicle(plate_num, brand, model, rent), load_(load) {} virtual ~Truck() {} virtual void printInfo() const { cout << "车牌号:" << plate_num_ << " 品牌:" << brand_ << " 型号:" << model_ << " 载重量:" << load_ << " 租金:" << rent_ << endl; } private: double load_; // 载重量 }; // 租赁类 class Rental { public: Rental(int days) : days_(days) {} ~Rental() {} void addVehicle(Vehicle* vehicle) { vehicles_.push_back(vehicle); } // 添加车辆 void printVehicles() const { // 输出所有车辆信息 cout << "当前可租车辆:" << endl; for (int i = 0; i < vehicles_.size(); ++i) { cout << i+1 << ". "; vehicles_[i]->printInfo(); } } void rentVehicle(int type, int brand, int model) { // 租车 Vehicle* vehicle = vehicles_[brand-1+model-1]; cout << "您租赁的车辆信息:" << endl; vehicle->printInfo(); double cost = vehicle->getRent() * days_; cout << "需要支付的租赁费用:" << cost << endl; total_cost_ += cost; } double getTotalCost() const { return total_cost_; } // 获取总租金 private: int days_; // 租赁天数 double total_cost_ = 0; // 总租金 vector<Vehicle*> vehicles_; // 所有车辆 }; int main() { // 初始化所有车辆 Car car1("浙A12345", "奥迪", "A6", 600.0, 5); Car car2("浙B67890", "宝马", "X5", 800.0, 5); Bus bus1("浙C11111", "金杯", "海狮", 1200.0, 20); Bus bus2("浙D22222", "依维柯", "得意", 1500.0, 30); Truck truck1("浙E33333", "东风", "天龙", 2000.0, 10.0); Truck truck2("浙F44444", "福田", "欧曼", 2500.0, 20.0); // 创建租赁类对象 Rental rental(7); rental.addVehicle(&car1); rental.addVehicle(&car2); rental.addVehicle(&bus1); rental.addVehicle(&bus2); rental.addVehicle(&truck1); rental.addVehicle(&truck2); // 输出所有车辆信息 rental.printVehicles(); // 租车并计算租金 int type, brand, model; cout << "请输入租赁的车辆类型(1-小轿车 2-客车 3-货车):" << endl; cin >> type; cout << "请输入租赁的车辆品牌(1-奥迪 2-宝马 3-金杯 4-依维柯 5-东风 6-福田):" << endl; cin >> brand; cout << "请输入租赁的车辆型号(1-A6 2-X5 3-海狮 4-得意 5-天龙 6-欧曼):" << endl; cin >> model; rental.rentVehicle(type, brand, model); // 输出总租金 cout << "总租金:" << rental.getTotalCost() << endl; return 0; } ``` 在这个程序中,我们定义了一个Vehicle基类和三个派生类(Car、Bus和Truck),用于表示不同类型的车辆。每个派生类都重载了基类中的printInfo()函数,以便输出车辆信息。 我们还定义了一个Rental类,用于管理所有车辆和租赁信息。该类包含一个vector类型的vehicles_成员变量,用于存储所有车辆的指针。它还包含了租赁天数、总租金等成员变量,以及添加车辆、输出所有车辆信息、租车并计算租金等成员函数。 在主函数中,我们首先初始化了所有车辆,并将它们添加到Rental对象中。然后输出所有车辆信息,接着让用户输入租赁的车辆类型、品牌和型号,并调用Rental对象的rentVehicle()函数进行租车和计算租金。最后输出总租金。 这是一个简单的C++汽车租赁系统设计,可以根据具体需求进行修改和扩展。
阅读全文

相关推荐

最新推荐

recommend-type

C#实现简单的汽车租赁系统

在这个汽车租赁系统中,`Car` 和 `Truck` 类都继承自 `Vehicle` 类。这样,它们可以共享 `Vehicle` 类中定义的通用属性(如车牌号、车名、颜色等)和方法(如计算租金),同时每个子类还可以添加其特有的属性和方法...
recommend-type

C#的WinForm开发框架源码 权限管理系统源码数据库 SQL2008源码类型 WinForm

WinForm开发框架源码 权限管理系统源码 功能描述:01.登录界面 02.系统配置 03.申请账户 04.即时通讯 05.发送消息 06.广播消息 07.软件频道 - 内部通讯录 08.软件频道 - 名片管理 09.软件频道 - 代码生成器 10.系统后台管理 - 用户审核 11.系统后台管理 - 用户管理 12.系统后台管理 - 组织机构管理 13.系统后台管理 - 角色管理 14.系统后台管理 - 员工管理 15.系统后台管理 - 岗位管理 16.系统后台管理 - 用户权限设置 17.系统后台管理 - 角色权限设置 18.系统后台管理 - 组织机构权限设置 19.系统后台管理 - 菜单权限项设置 20.系统后台管理 - 选项管理 21.系统后台管理 - 序号(流水号)管理 22.系统后台管理 - 系统日志 - 按用户访问情况 23.系统后台管理 - 系统日志 - 按用户查询 24.系统后台管理 - 系统日志 - 按菜单查询 25.系统后台管理 - 系统日志 - 按日期查询 26.系统后台管理 - 系统日志 - 系统异常情况记
recommend-type

超级常用的甘特图-项目管理.xlsx

超级常用的甘特图-项目管理.xlsx
recommend-type

【MRFO栅格地图】蝠鲼觅食算法MRFO栅格地图路径规划(目标函数:最短距离)【含Matlab源码 9168期】.mp4

Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
recommend-type

.f2812.acid

.f2812.acid
recommend-type

平尾装配工作平台运输支撑系统设计与应用

资源摘要信息:"该压缩包文件名为‘行业分类-设备装置-用于平尾装配工作平台的运输支撑系统.zip’,虽然没有提供具体的标签信息,但通过文件标题可以推断出其内容涉及的是航空或者相关重工业领域内的设备装置。从标题来看,该文件集中讲述的是有关平尾装配工作平台的运输支撑系统,这是一种专门用于支撑和运输飞机平尾装配的特殊设备。 平尾,即水平尾翼,是飞机尾部的一个关键部件,它对于飞机的稳定性和控制性起到至关重要的作用。平尾的装配工作通常需要在一个特定的平台上进行,这个平台不仅要保证装配过程中平尾的稳定,还需要适应平尾的搬运和运输。因此,设计出一个合适的运输支撑系统对于提高装配效率和保障装配质量至关重要。 从‘用于平尾装配工作平台的运输支撑系统.pdf’这一文件名称可以推断,该PDF文档应该是详细介绍这种支撑系统的构造、工作原理、使用方法以及其在平尾装配工作中的应用。文档可能包括以下内容: 1. 支撑系统的设计理念:介绍支撑系统设计的基本出发点,如便于操作、稳定性高、强度大、适应性强等。可能涉及的工程学原理、材料学选择和整体结构布局等内容。 2. 结构组件介绍:详细介绍支撑系统的各个组成部分,包括支撑框架、稳定装置、传动机构、导向装置、固定装置等。对于每一个部件的功能、材料构成、制造工艺、耐腐蚀性以及与其他部件的连接方式等都会有详细的描述。 3. 工作原理和操作流程:解释运输支撑系统是如何在装配过程中起到支撑作用的,包括如何调整支撑点以适应不同重量和尺寸的平尾,以及如何进行运输和对接。操作流程部分可能会包含操作步骤、安全措施、维护保养等。 4. 应用案例分析:可能包含实际操作中遇到的问题和解决方案,或是对不同机型平尾装配过程的支撑系统应用案例的详细描述,以此展示系统的实用性和适应性。 5. 技术参数和性能指标:列出支撑系统的具体技术参数,如载重能力、尺寸规格、工作范围、可调节范围、耐用性和可靠性指标等,以供参考和评估。 6. 安全和维护指南:对于支撑系统的使用安全提供指导,包括操作安全、应急处理、日常维护、定期检查和故障排除等内容。 该支撑系统作为专门针对平尾装配而设计的设备,对于飞机制造企业来说,掌握其详细信息是提高生产效率和保障产品质量的重要一环。同时,这种支撑系统的设计和应用也体现了现代工业在专用设备制造方面追求高效、安全和精确的趋势。"
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB遗传算法探索:寻找随机性与确定性的平衡艺术

![MATLAB多种群遗传算法优化](https://img-blog.csdnimg.cn/39452a76c45b4193b4d88d1be16b01f1.png) # 1. 遗传算法的基本概念与起源 遗传算法(Genetic Algorithm, GA)是一种模拟自然选择和遗传学机制的搜索优化算法。起源于20世纪60年代末至70年代初,由John Holland及其学生和同事们在研究自适应系统时首次提出,其理论基础受到生物进化论的启发。遗传算法通过编码一个潜在解决方案的“基因”,构造初始种群,并通过选择、交叉(杂交)和变异等操作模拟生物进化过程,以迭代的方式不断优化和筛选出最适应环境的
recommend-type

如何在S7-200 SMART PLC中使用MB_Client指令实现Modbus TCP通信?请详细解释从连接建立到数据交换的完整步骤。

为了有效地掌握S7-200 SMART PLC中的MB_Client指令,以便实现Modbus TCP通信,建议参考《S7-200 SMART Modbus TCP教程:MB_Client指令与功能码详解》。本教程将引导您了解从连接建立到数据交换的整个过程,并详细解释每个步骤中的关键点。 参考资源链接:[S7-200 SMART Modbus TCP教程:MB_Client指令与功能码详解](https://wenku.csdn.net/doc/119yes2jcm?spm=1055.2569.3001.10343) 首先,确保您的S7-200 SMART CPU支持开放式用户通
recommend-type

MAX-MIN Ant System:用MATLAB解决旅行商问题

资源摘要信息:"Solve TSP by MMAS: Using MAX-MIN Ant System to solve Traveling Salesman Problem - matlab开发" 本资源为解决经典的旅行商问题(Traveling Salesman Problem, TSP)提供了一种基于蚁群算法(Ant Colony Optimization, ACO)的MAX-MIN蚁群系统(MAX-MIN Ant System, MMAS)的Matlab实现。旅行商问题是一个典型的优化问题,要求找到一条最短的路径,让旅行商访问每一个城市一次并返回起点。这个问题属于NP-hard问题,随着城市数量的增加,寻找最优解的难度急剧增加。 MAX-MIN Ant System是一种改进的蚁群优化算法,它在基本的蚁群算法的基础上,对信息素的更新规则进行了改进,以期避免过早收敛和局部最优的问题。MMAS算法通过限制信息素的上下界来确保算法的探索能力和避免过早收敛,它在某些情况下比经典的蚁群系统(Ant System, AS)和带有局部搜索的蚁群系统(Ant Colony System, ACS)更为有效。 在本Matlab实现中,用户可以通过调用ACO函数并传入一个TSP问题文件(例如"filename.tsp")来运行MMAS算法。该问题文件可以是任意的对称或非对称TSP实例,用户可以从特定的网站下载多种标准TSP问题实例,以供测试和研究使用。 使用此资源的用户需要注意,虽然该Matlab代码可以免费用于个人学习和研究目的,但若要用于商业用途,则需要联系作者获取相应的许可。作者的电子邮件地址为***。 此外,压缩包文件名为"MAX-MIN%20Ant%20System.zip",该压缩包包含Matlab代码文件和可能的示例数据文件。用户在使用之前需要将压缩包解压,并将文件放置在Matlab的适当工作目录中。 为了更好地理解和应用该资源,用户应当对蚁群优化算法有初步了解,尤其是对MAX-MIN蚁群系统的基本原理和运行机制有所掌握。此外,熟悉Matlab编程环境和拥有一定的编程经验将有助于用户根据个人需求修改和扩展算法。 在实际应用中,用户可以根据问题规模调整MMAS算法的参数,如蚂蚁数量、信息素蒸发率、信息素增量等,以获得最优的求解效果。此外,也可以结合其他启发式或元启发式算法,如遗传算法、模拟退火等,来进一步提高算法的性能。 总之,本资源为TSP问题的求解提供了一种有效的算法框架,且Matlab作为编程工具的易用性和强大的计算能力,使得该资源成为算法研究人员和工程技术人员的有力工具。通过本资源的应用,用户将能够深入探索并实现蚁群优化算法在实际问题中的应用,为解决复杂的优化问题提供一种新的思路和方法。