2010-03-14 46 views
8

傢伙我知道這個問題是非常基本的,但我在幾篇出版物(網站,書籍)中遇到過不同風格的重載虛函數。我的意思是:如果我有基類:如何重寫好樣式的虛函數? [C++]

class Base 
{ 
public: 
virtual void f() = 0; 
}; 

在一些出版物中我看到了重寫這個有些作者只想說:

void f();  

有的還是會之前無效重複虛擬關鍵字。哪種形式的覆蓋風格很好? 謝謝你的回答。

+0

@詹姆斯麥克奈利斯 - 感謝,有一個奇怪的原因(其原因是在波蘭我們稱之爲覆蓋(上帝爲什麼我們必須努力在波蘭總是那麼聰明))我確信,正確的這種機制的調用方式。再次感謝。 – 2010-03-15 10:52:52

回答

13

這完全是一個味道問題。有些風格的自我記錄價值與其他風格的非冗餘價值之間可能存在一些弱的爭論。

+0

很高興看到第一個答案是最好的答案。還要注意新標準在文檔中添加了一些裝飾器,並檢查你爲什麼超載,覆蓋,隱藏等 – 2010-03-14 19:41:40

3

不需要將虛擬關鍵字添加到您在子類中重寫的方法,因爲無法通過在子類聲明中省略該限定符來刪除該限定符。

然而,重複虛擬關鍵字是一種很好的做法,因爲它記錄了哪些派生函數在基類中是虛擬的。

這也是'High Integrity C++ Coding Standard Manual'推薦的。

鏈接在C++ FAQ

0

我個人使用兩種樣式:virtual表示該方法可以被覆蓋。

因此,我們有兩種情況:

  • 如果你希望你的類的用戶知道該方法可能會被改寫,使用virtual關鍵字
  • 如果您希望隱藏這個事實(因爲您提供的例如繼Template Pattern)的新方法,然後使用關鍵字不要使用virtual關鍵字

我想這還沒有(AB的另一種方式?)。