1. 程式人生 > >使用純虛擬函式的一個小細節——派生類定義該虛擬函式時宣告語句必須與基類裡完全一致

使用純虛擬函式的一個小細節——派生類定義該虛擬函式時宣告語句必須與基類裡完全一致

純虛擬函式在派生類裡明明補寫出來了定義,但是實際發現是無效的,派生類因沒有定義該純虛擬函式同樣被編譯器視為了抽象類。

原因很有可能是:基類和派生類的虛擬函式必須型別、名字、引數數量、名字、型別、以及函式前後綴的各種其他屬性(比如const等)必須完全一致!否則會被認為不是同一個函式。無法產生“覆蓋”的效果,而可能僅僅是“過載”,這樣就會有各種意想不到的問題了。

另外一個需要注意的現象是:

在派生類定義裡對應函式開頭加上virtual也不行。注意,在派生類裡詳細定義該函式時加virtual可以加、也可以不加。在派生類裡外詳細定義該函式時加virtual似乎反而會報錯。注意這個情況。