class CalcTax{
public:
virtual void calc_tax()=0; // 纯虚函数
};
class SalesOrder{
private:
CalcTax* calc_tax_way = new CalcTax(); // CalcTax不能被实例化
public:
SalesOrder(CalcTax* calc_tax_in){
calc_tax_way = calc_tax_in;
}
void calc_tax(){
calc_tax_way->calc_tax();
}
};
编译时会报错:
main.cpp:32:33: error: allocating an object of abstract class type 'CalcTax'
CalcTax* calc_tax_way = new CalcTax();
原因是CalcTax包含纯虚函数,说明这个类不能被实例化。
c++中包含纯虚函数的类是不允许被实例化的!!!,进一步说,如果继承该类的类不重写这个纯虚函数的话,也是不允许被实例化的。即,包含纯虚函是的类派生出来的类都必须重写这个纯虚函数!
为什么要有这个机制呢?
例如动物可以派生出猫、狗等。 猫和狗可以实例化,而动物这个概念是不可以实例化的。