编写一个汽车类,派生货车类和客车类,再基于这两个类派生皮卡车类,体现并注释说明虚基类、虚函数和纯虚函数的功能特点
时间: 2024-03-12 10:49:36 浏览: 21
好的,下面是代码和注释:
```c++
// 定义一个汽车类
class Car {
public:
// 构造函数和析构函数
Car() {}
virtual ~Car() {}
// 虚函数,用于显示车的信息
virtual void showInfo() {
cout << "This is a car." << endl;
}
};
// 定义一个货车类,继承自汽车类
class Truck : virtual public Car {
public:
// 构造函数和析构函数
Truck() {}
virtual ~Truck() {}
// 虚函数,用于显示货车的信息
virtual void showInfo() {
cout << "This is a truck." << endl;
}
};
// 定义一个客车类,继承自汽车类
class Bus : virtual public Car {
public:
// 构造函数和析构函数
Bus() {}
virtual ~Bus() {}
// 虚函数,用于显示客车的信息
virtual void showInfo() {
cout << "This is a bus." << endl;
}
};
// 定义一个皮卡车类,继承自货车类和客车类
class Pickup : public Truck, public Bus {
public:
// 构造函数和析构函数
Pickup() {}
virtual ~Pickup() {}
// 虚函数,用于显示皮卡车的信息
virtual void showInfo() {
cout << "This is a pickup." << endl;
}
};
int main() {
// 创建一个汽车类对象
Car* car = new Car();
// 调用虚函数showInfo(),输出"This is a car."
car->showInfo();
// 释放内存
delete car;
// 创建一个货车类对象
Truck* truck = new Truck();
// 调用虚函数showInfo(),输出"This is a truck."
truck->showInfo();
// 释放内存
delete truck;
// 创建一个客车类对象
Bus* bus = new Bus();
// 调用虚函数showInfo(),输出"This is a bus."
bus->showInfo();
// 释放内存
delete bus;
// 创建一个皮卡车类对象
Pickup* pickup = new Pickup();
// 调用虚函数showInfo(),输出"This is a pickup."
pickup->showInfo();
// 释放内存
delete pickup;
return 0;
}
```
虚函数和虚基类的功能特点:
1. 虚函数可以在派生类中被重写,实现多态性。
2. 虚基类可以解决多继承时的二义性问题,确保只有一份基类的实例被派生类继承。
纯虚函数的功能特点:
1. 纯虚函数是没有实现的虚函数,需要在派生类中被重写,实现多态性。
2. 纯虚函数可以用来实现接口和抽象类,使得派生类必须实现该函数,从而保证了程序的正确性和可扩展性。