閱讀810 返回首頁    go 阿裏雲 go 技術社區[雲棲]


C++編程規範之38:實施安全的覆蓋

摘要:

    負責任地進行覆蓋:覆蓋一個虛擬函數時,應該保持可替換性;說得更具體一點,就是要保持基類中函數的前後置條件。不要改變虛擬函數的默認參數。應該顯式地將覆蓋函數重新聲明為virtual.

    雖然派生類通常會增加更多狀態,但他們所建模的是其基類的子集而非超集。在正確的繼承關係中,派生類所建模的是更一般的基礎概念的一個特例。

    定義一個可能的失敗的派生覆蓋函數,隻是在基類沒有聲明換做總是成功的時候,這個定義才是正確的。在覆蓋的時候,永遠不要修改默認參數。它們不是函數簽名的一部分,客戶代碼將因為不知情而將不同參數傳遞給函數,具體要傳遞給哪一個參數,將取決於它們具有層次結構中那個節點的訪問權限。

對於調用者而言,同一個對象的成員函數會不加提示地根據自己訪問所使用的靜態類型而接受不同參數,這可能是一件非常令人奇怪的事情。在覆蓋函數時,應該添加冗餘的virtual.這能夠更清楚地想閱讀代碼的人表達自己的意圖。謹防不小心在基類中隱藏了重載函數。關於重載、覆蓋、隱藏的概念區分詳見:https://blog.csdn.net/longshengguoji/article/details/17691913

最後更新:2017-04-03 12:54:00

  上一篇:go 對 GNU Radio 進行 Octave 分析
  下一篇:go linux驅動開發--字符設備:簡單的file_operations示例