抽象类
- 基类作为抽象类
- 拥有纯虚函数的类叫抽象类
- 抽象类不能再实例化对象,但是可以定义指针与引用
举例
#include <iostream>using namespace std;
class Car
{
public:Car(string name, double oil):_name(name), _oil(oil){}string getName() { return _name; }double getLeftKM() { return _oil * getKMPerGallon(); }
protected:virtual double getKMPerGallon() = 0;
private:string _name;double _oil;
};class Benz : public Car {
public:Benz(string name, double oil) :Car(name, oil){}double getKMPerGallon() {return 20.0;}
private:
};class Audi : public Car {
public:Audi(string name, double oil) :Car(name, oil) {}double getKMPerGallon() {return 19.0;}
private:};class BWM : public Car {
public:BWM(string name, double oil) :Car(name, oil) {}double getKMPerGallon() {return 18.0;}
private:};void showCarLeftKM(Car& car)
{cout << "车名:" << car.getName() << ";" << "剩余公里数:" << car.getLeftKM() <<"KM" << endl;
}int main()
{Benz b1("奔驰",20);BWM b2("宝马", 18);Audi a("奥迪", 19);showCarLeftKM(b1);showCarLeftKM(b2);showCarLeftKM(a);
}
上述代码抽象出Car共有的两种属性,名字以及剩余的汽油。当涉及到针对不同类型的的车时,它们因为剩余汽油的不同以及每升汽油的行程数不同导致汽车的剩余公里数不同。所以使用虚函数定义不同类型汽车得到的不同每升汽油行驶的公里数的函数。
纯虚函数的定义使得class Car成为抽象类。