本关任务:定义一个车(vehicle)基类,具有数据成员 maxspeed, weight(均为 int 型), 函数成员 run(), stop(),由此派生出自行车(bicycle)类、汽车(motorcar)类。其中, bicycle类新增数据成员高度(height), motorcar类新增数据成员座位数(seatnum)属性。再从 bicycle和 motorcar 派生出摩托车(motorcycle)类,并在主程序中测试这个类。(每个类都要求定义构造函数和析构函数) (提示: run(), stop()函数体,通过输出字符串 run, stop 简单模拟。 )
时间: 2024-01-18 22:02:13 浏览: 102
好的,根据您的要求,我来为您编写这个车辆类的继承关系。以下是代码实现:
```c++
#include<iostream>
using namespace std;
class Vehicle{
public:
Vehicle(int m, int w):maxspeed(m), weight(w){}
virtual ~Vehicle(){}
virtual void run(){cout << "run" << endl;}
virtual void stop(){cout << "stop" << endl;}
protected:
int maxspeed;
int weight;
};
class Bicycle:public Vehicle{
public:
Bicycle(int m, int w, int h):Vehicle(m, w), height(h){}
~Bicycle(){}
private:
int height;
};
class Motorcar:public Vehicle{
public:
Motorcar(int m, int w, int s):Vehicle(m, w), seatnum(s){}
~Motorcar(){}
private:
int seatnum;
};
class Motorcycle:public Bicycle, public Motorcar{
public:
Motorcycle(int m, int w, int h, int s):Bicycle(m, w, h), Motorcar(m, w, s){}
~Motorcycle(){}
};
int main(){
Motorcycle m(120, 200, 50, 2);
m.run();
m.stop();
return 0;
}
```
以上代码中,`Vehicle`为车辆类的基类,包含了车辆的最大速度和重量属性,以及行驶和停止的函数。`Bicycle`和`Motorcar`分别为从`Vehicle`派生出的自行车和汽车类,新增了高度和座位数两个属性。`Motorcycle`则同时继承了`Bicycle`和`Motorcar`,表示了摩托车这一车辆类型。在`main`函数中,我们创建了一辆最大速度为120,重量为200,高度为50,座位数为2的摩托车,并测试其行驶和停止的方法。
值得注意的是,由于在`Motorcycle`中同时继承了`Bicycle`和`Motorcar`,因此需要使用虚拟继承,保证`Vehicle`类的构造函数只会被调用一次,避免出现问题。
阅读全文