目录
1、纯虚函数的概念
被virtual关键字修饰的函数,我们称为虚函数;而在虚函数的后面加上 =0,那么这个函数被称为纯虚函数。
virtual void Drive() = 0; // 纯虚函数
2、抽象类的概念
包含纯虚函数的类称为抽象类。抽象类中也可以包含虚函数和普通函数。
class Car
{
public:
virtual void Drive() = 0;
};
3、抽象类的特性
抽象类无法实例化出对象
抽象类包含纯虚函数,纯虚函数只有声明没有定义,无法实例化出对象。抽象类的作用只是提供一份大纲,具体实现细节交由抽象类的派生类来做。
抽象类的派生类必须重写纯虚函数
即便是子类继承了抽象类,也无法实例化,只有重写了所有的纯虚函数,才能实例化出对象。
4、抽象类的实际应用
抽象类比较方便的地方在于,一方面设计基类的时候,只需要提供函数声明(或者说“接口”),无需手动去实现。具体要怎么去实现,派生类在实际调用的时候自己去实现。
另一方面,无需担心会忘记重写基类的虚函数,因为如果没有重写纯虚函数,是无法实例化的。
class Car
{
public:
virtual void Drive() = 0;
virtual void OilSensor() = 0;
void FaultDetect() {
cout << "fault detect" << endl;
}
};
class Benz :public Car
{
public:
// 必须实现基类所有的纯虚函数
virtual void Drive() { cout << "Benz Drive" << endl; }
virtual void OilSensor() { cout << "Benz Drive" << endl; }
};
int main() {
Benz benz;
benz.Drive();
benz.OilSensor();
benz.FaultDetect();
return 0;
}