[筆記]c++包含純虛擬函式的類不允許被例項化
阿新 • • 發佈:2019-01-06
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++中包含純虛擬函式的類是不允許被例項化的!!!,進一步說,如果繼承該類的類不重寫這個純虛擬函式的話,也是不允許被例項化的。即,包含純虛函是的類派生出來的類都必須重寫這個純虛擬函式!
為什麼要有這個機制呢?
例如動物可以派生出貓、狗等。 貓和狗可以例項化,而動物這個概念是不可以例項化的。