编写一个汽车类,派生货车类和客车类,再基于这两个类派生皮卡车类,体现并注释说明虚基类、虚函数和纯虚函数的功能特点
时间: 2024-03-13 21:43:50 浏览: 128
虚基类、虚函数与纯虚函数
好的,我来回答你的问题。
首先,我们先定义一个基类汽车类,其中包含车辆的品牌、型号、颜色、价格等属性,以及车辆的基本行驶方法move():
```C++
class Vehicle{
protected:
string brand; //品牌
string model; //型号
string color; //颜色
double price; //价格
public:
Vehicle(string brand, string model, string color, double price);
virtual void move() = 0; //纯虚函数
};
```
接下来,我们定义两个派生类:客车类和货车类,它们继承了汽车类的属性和方法,并分别添加了自己的属性和方法:
```C++
class PassengerCar : virtual public Vehicle{
protected:
int passengerNum; //载客数
public:
PassengerCar(string brand, string model, string color, double price, int passengerNum);
void move(); //重载虚函数
void carryPassenger(); //载客
};
class Truck : virtual public Vehicle{
protected:
double loadCapacity; //载重量
public:
Truck(string brand, string model, string color, double price, double loadCapacity);
void move(); //重载虚函数
void carryCargo(); //载货
};
```
可以看到,客车类和货车类都继承了虚基类Vehicle,并且重载了虚函数move(),以适应它们各自的行驶方式。此外,它们还分别添加了自己的方法,用于载客和载货。
最后,我们再基于客车类和货车类派生一个皮卡车类:
```C++
class Pickup : public PassengerCar, public Truck{
public:
Pickup(string brand, string model, string color, double price, int passengerNum, double loadCapacity);
void move(); //重载虚函数
void carryCargo(); //重载虚函数
void carryPassenger(); //重载虚函数
};
```
可以看到,皮卡车类同时继承了客车类和货车类,因此需要使用虚基类继承。此外,皮卡车类也重载了虚函数move(),并分别重载了carryCargo()和carryPassenger()方法,以适应它既可以载货又可以载客的特点。
总结一下,虚基类、虚函数和纯虚函数都是面向对象编程中的重要概念,它们的作用分别如下:
- 虚基类:解决多继承时的二义性问题,使得派生类只包含一份基类的成员数据。
- 虚函数:允许派生类重载基类的函数,并在运行时根据对象的实际类型调用对应的函数。
- 纯虚函数:在基类中定义函数接口,但没有提供实现,强制派生类去实现该函数,从而达到多态的效果。
阅读全文