新建文件”lab7_3.cpp“,编写程序声明一个车(vehicle)基类,由此派生出自行车(bicycle)类、汽车(motocar),注意把vehicle基类派生为虚基类。再从bicycle和motocar派生出摩托车(motocycle)类,在main()函数中执行这个类
时间: 2024-02-12 11:06:57 浏览: 65
用c++ 定义一个车(Vehicle)基类,有Run,Stop等成员函数,由此派生出自行车(bicycle)类,汽车(motorcar)
好的,我明白了。以下是lab7_3.cpp的代码:
```cpp
#include <iostream>
using namespace std;
class vehicle { // 车基类
public:
virtual void run() { // 虚函数
cout << "vehicle is running." << endl;
}
};
class bicycle : virtual public vehicle { // 自行车类,继承自车基类(虚继承)
public:
void run() { // 重写虚函数
cout << "bicycle is running." << endl;
}
};
class motocar : virtual public vehicle { // 汽车类,继承自车基类(虚继承)
public:
void run() { // 重写虚函数
cout << "motocar is running." << endl;
}
};
class motocycle : public bicycle, public motocar { // 摩托车类,同时继承自自行车和汽车类
public:
void run() { // 重写虚函数
cout << "motocycle is running." << endl;
}
};
int main() {
vehicle* v;
vehicle vh;
bicycle b;
motocar m;
motocycle mc;
v = &vh;
v->run(); // 调用车基类的虚函数
v = &b;
v->run(); // 调用自行车类的虚函数
v = &m;
v->run(); // 调用汽车类的虚函数
v = &mc;
v->run(); // 调用摩托车类的虚函数
return 0;
}
```
程序中首先定义了一个车(vehicle)基类,并将其派生为虚基类。然后分别定义了自行车(bicycle)类和汽车(motocar)类,它们都继承自车基类(虚继承)。接着定义了摩托车(motocycle)类,它同时继承自自行车和汽车类。
在main()函数中,定义了一个指向车基类对象、指向自行车类对象、指向汽车类对象、指向摩托车类对象的指针v,并分别调用它们的run()函数。由于run()函数是虚函数,所以会根据对象类型调用对应的虚函数。程序输出结果如下:
```
vehicle is running.
bicycle is running.
motocar is running.
motocycle is running.
```
可以看到,调用不同类型的对象的虚函数时,输出的结果也不同,说明虚函数的多态性得到了体现。
阅读全文