编写一个汽车类,派生货车类和客车类,再基于这两个类派生皮卡车类,体现并注释说明虚基类、虚函数和纯虚函数的功能特点
时间: 2024-02-25 09:51:29 浏览: 65
虚基类、虚函数与纯虚函数
好的,以下是实现您所需的代码及注释说明:
```c++
#include<iostream>
using namespace std;
// 定义一个虚基类Vehicle
class Vehicle {
public:
// 纯虚函数run,表示车辆运行
virtual void run() = 0;
// 虚函数stop,表示车辆停止
virtual void stop() {
cout << "Vehicle stop." << endl;
}
};
// 定义一个派生类Truck,继承自虚基类Vehicle
class Truck : virtual public Vehicle {
public:
void run() {
cout << "Truck run." << endl;
}
};
// 定义一个派生类Bus,继承自虚基类Vehicle
class Bus : virtual public Vehicle {
public:
void run() {
cout << "Bus run." << endl;
}
};
// 定义一个派生类Pickup,同时继承自Truck和Bus
class Pickup : public Truck, public Bus {
public:
void run() {
cout << "Pickup run." << endl;
}
};
int main() {
// 实例化Pickup类
Pickup p;
// 调用run函数
p.run();
// 调用虚函数stop函数
p.stop();
return 0;
}
```
注释说明:
- `Vehicle` 类是一个虚基类,其中包含一个纯虚函数 `run()` 和一个虚函数 `stop()`。
- `Truck` 类和 `Bus` 类都是派生自 `Vehicle` 类,并实现了 `run()` 函数。
- `Pickup` 类同时继承自 `Truck` 类和 `Bus` 类,它们都继承自 `Vehicle` 类,这里我们用了虚继承,以避免出现二义性。
- `Pickup` 类重写了 `run()` 函数,并且没有实现 `stop()` 函数,因为它继承自 `Vehicle` 类,`stop()` 函数已经有默认实现。
- 在 `main()` 函数中,我们实例化了 `Pickup` 类,并分别调用了它们的 `run()` 函数和继承自 `Vehicle` 类的 `stop()` 函数。
总结:
- 虚函数的作用是在基类中定义一个函数,并在派生类中进行重写。
- 纯虚函数是在基类中定义一个没有实际实现的函数,只有函数原型,需要在派生类中进行实现。
- 虚基类是用于解决多继承时出现的二义性问题,通过虚继承,可以确保派生类只继承一份虚基类的成员。
阅读全文