1. 程式人生 > >[筆記]c++包含純虛擬函式的類不允許被例項化

[筆記]c++包含純虛擬函式的類不允許被例項化

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++中包含純虛擬函式的類是不允許被例項化的!!!,進一步說,如果繼承該類的類不重寫這個純虛擬函式的話,也是不允許被例項化的。即,包含純虛函是的類派生出來的類都必須重寫這個純虛擬函式!

為什麼要有這個機制呢?

例如動物可以派生出貓、狗等。 貓和狗可以例項化,而動物這個概念是不可以例項化的。