天天看點

C++ 在繼承中虛函數、純虛函數、普通函數,三者的差別

1.虛函數(impure virtual)

  C++的虛函數主要作用是“運作時多态”,父類中提供虛函數的實作,為子類提供預設的函數實作。

  子類可以重寫父類的虛函數實作子類的特殊化。

  如下就是一個父類中的虛函數:

2.純虛函數(pure virtual)

  C++中包含純虛函數的類,被稱為是“抽象類”。抽象類不能使用new出對象,隻有實作了這個純虛函數的子類才能new出對象。

  C++中的純虛函數更像是“隻提供申明,沒有實作”,是對子類的限制,是“接口繼承”。

  C++中的純虛函數也是一種“運作時多态”。

  如下面的類包含純虛函數,就是“抽象類”:

3.普通函數(no-virtual)

  普通函數是靜态編譯的,沒有運作時多态,隻會根據指針或引用的“字面值”類對象,調用自己的普通函數。

  普通函數是父類為子類提供的“強制實作”。

  是以,在繼承關系中,子類不應該重寫父類的普通函數,因為函數的調用至于類對象的字面值有關。

4.程式綜合執行個體

執行結果:

C++ 在繼承中虛函數、純虛函數、普通函數,三者的差別

繼續閱讀