实验内容
实验目的:
掌握面向对象程序设计继承和派生机制的概念
! 掌握类继承关系中的构造函数的定义方法
●掌 握派生类中构造函数和析构函数的执行顺序
掌握三种继承方式的特点和属性
实验内容布置
设计-一个交通工具类tool,具有轮胎数、生产厂家、限载人数、限载重量;设
计-一个汽车类Motor,该类具有限载人数、轮胎数、马力数、生产厂家多个数
据成员,根据Motor类派生出Car类、Bus类和Truck类, 分别新增单程费用、
载人单价、载重单价等数据成员。再设计-一个自行车类bicycle,具有轮胎与
踏板直径比,生产厂家、限载人数、限载重量、轮胎数等数据成员。根据
bicycle和motor,派生出电动自行车类moto. bicycle, 新增数据成员市场价
格。说明:
每个类都具有成员函数Display,用于输出各类对象的相关信息。
➢自行设计main函数, 生成各个类的对象并调用display函数显示各类对象的相
关信息。
➢要求利用多继承的概念。每个类要有构造函数,要体现构造函数的调用顺
序;
要求使用虚基类来解决二义性问题
➢自行设计main函数,能将上面要求体现出来。
实验代码
#include <iostream> using namespace std; // 交通工具类 class Tool { protected: int tireNum; // 轮胎数 string manufacturer; // 生产厂家 int maxPassenger; // 最大载人数 int maxLoad; // 最大载重量 public: // 构造函数 Tool(int t, string m, int p, int l) : tireNum(t), manufacturer(m), maxPassenger(p), maxLoad(l) {} // 显示信息函数 virtual void Display() { cout << "Tire number: " << tireNum << endl; cout << "Manufacturer: " << manufacturer << endl; cout << "Max passenger: " << maxPassenger << endl; cout << "Max load: " << maxLoad << endl; } }; // 汽车类,继承自交通工具类 class Motor : public virtual Tool { protected: int maxPower; // 最大马力数 public: // 构造函数 Motor(int t, string m, int p, int l, int mp) : Tool(t, m, p, l), maxPower(mp) {} // 显示信息函数 void Display() { Tool::Display(); // 调用父类的显示信息函数 cout << "Max power: " << maxPower << endl; } }; // 小汽车类,继承自汽车类 class Car : public Motor { protected: int singleCost; // 单程费用 public: // 构造函数 Car(int t, string m, int p, int l, int mp, int c) : Tool(t, m, p, l), Motor(t, m, p, l, mp), singleCost(c) {} // 显示信息函数 void Display() { Motor::Display(); // 调用父类的显示信息函数 cout << "Single cost: " << singleCost << endl; } }; // 公交车类,继承自汽车类 class Bus : public Motor { protected: int passengerPrice; // 载人单价 public: // 构造函数 Bus(int t, string m, int p, int l, int mp, int pp) : Tool(t, m, p, l), Motor(t, m, p, l, mp), passengerPrice(pp) {} // 显示信息函数 void Display() { Motor::Display(); // 调用父类的显示信息函数 cout << "Passenger price: " << passengerPrice << endl; } }; // 卡车类,继承自汽车类 class Truck : public Motor { protected: int loadPrice; // 载重单价 public: // 构造函数 Truck(int t, string m, int p, int l, int mp, int lp) : Tool(t, m, p, l), Motor(t, m, p, l, mp), loadPrice(lp) {} // 显示信息函数 void Display() { Motor::Display(); // 调用父类的显示信息函数 cout << "Load price: " << loadPrice << endl; } }; // 自行车类,继承自交通工具类 class Bicycle : public virtual Tool { protected: float tirePedalRatio; // 轮胎与踏板直径比 public: // 构造函数 Bicycle(int t, string m, int p, int l, float tp) : Tool(t, m, p, l), tirePedalRatio(tp) {} // 显示信息函数 void Display() { Tool::Display(); // 调用父类的显示信息函数 cout << "Tire-pedal ratio: " << tirePedalRatio << endl; } }; // 电动自行车类,继承自自行车类和汽车类 class MotoBicycle : public Bicycle, public Motor { protected: int marketPrice; // 市场价格 public: // 构造函数 MotoBicycle(int t, string m, int p, int l, float tp, int mp, int market) : Tool(t, m, p, l), Bicycle(t, m, p, l, tp), Motor(t, m, p, l, mp), marketPrice(market) {} // 显示信息函数 void Display() override { cout << "Moto.Bicycle:" << endl; // 输出类名 Bicycle::Display(); // 调用父类的显示信息函数 Motor::Display(); // 调用父类的显示信息函数 cout << "Market price: " << marketPrice << endl; } }; int main() { // 创建交通工具对象并调用显示信息函数 Tool tool(4, "Tool Manufacturer", 5, 500); tool.Display(); // 创建汽车对象并调用显示信息函数 Motor motor(4, "Motor Manufacturer", 5, 500, 1000); motor.Display(); // 创建小汽车对象并调用显示信息函数 Car car(4, "Car Manufacturer", 5, 500, 1000, 10); car.Display(); // 创建公交车对象并调用显示信息函数 Bus bus(6, "Bus Manufacturer", 50, 5000, 2000, 2); bus.Display(); // 创建卡车对象并调用显示信息函数 Truck truck(12, "Truck Manufacturer", 3, 20000, 3000, 5); truck.Display(); // 创建自行车对象并调用显示信息函数 Bicycle bicycle(2, "Bicycle Manufacturer", 1, 100, 1.5); bicycle.Display(); // 创建电动自行车对象并调用显示信息函数 MotoBicycle motoBicycle(2, "Moto.Bicycle Manufacturer", 1, 100, 1.5, 2000, 15000); motoBicycle.Display(); return 0; }
- 运行结果