1. 程式人生 > >c++ primer第五版----學習筆記(十五)Ⅰ

c++ primer第五版----學習筆記(十五)Ⅰ

  • oop的核心思想是多型性。我們把具有繼承關係的多個型別稱為多型型別; 引用或指標的靜態型別與動態型別不同這一事實正是c++語言支援多型性的根本存在
  • 當且僅當對通過指標或引用呼叫虛擬函式時,才會在執行時解析該呼叫,也只有在這種情況下物件的動態型別才有可能與靜態型別不同
  • 一個派生類的函式如果覆蓋了某個繼承而來的虛擬函式,則它的形參型別必須與被它覆蓋的基類函式完全一致,且派生類中虛擬函式的返回型別也必須與基類函式匹配(當類的虛擬函式返回型別是類的本身的指標或引用時,上述規則無效)
  • 派生類如果定義了一個與基類虛擬函式同名函式,但引數列表不相同的話,仍然是合法行為,編譯器會認為該函式與基類虛擬函式是相互獨立的,但這往往是把形參列表弄錯了的錯誤,編譯器發現不了,所以C++11有一個好東西,在其後加上override表示其要對基類的函式進行覆蓋,若未覆蓋,編譯器報錯,我們可以發現自己的錯誤 
  • 虛擬函式可以有預設實參,若函式呼叫了預設實參,則實參值由靜態型別決定,所以基類和派生類中定義的預設實參最好一致
  • 某些情況下,我們不希望進行動態繫結,我們可使用作用域運算子強行指定其執行哪個版本,進行迴避虛擬函式—一般情況下是成員函式中的程式碼才需要以防止自己呼叫自身造成無限迴圈