2:繼承關係中:基類的指針或者引用可以綁定到子類對象上。這就意味着,我們並不知道一個基類的指針或引用綁定的對象的具體類型了。
3:動態類型與靜態類型:靜態類型是指編譯時就知道了類型(聲明或者定義中的類型),而動態類型則是變量或者表達式在內存中的對象類型,只有在運行時纔會知道。
4:只有指針和引用纔會有靜態類型和動態類型不同。
5:不存在基類向派生類隱式的轉換。
6:在基類和派生類的對象之間不存在轉換。
7:當我們用一個派生類對象給基類對象初始化或者賦值,派生類的基類部分會被留下來,而其他派生類部分都會被忽略,成爲切掉。
8:所有的虛函數都需要被定義,因爲編譯器也無法確定要用哪個虛函數,所以我們不定義就有可能在運行時才發現錯誤,編譯時發現不了。
8:爲啥動態綁定只會出現在指針或者引用上呢?因爲他們都是去某一個內存地址中去解析對象,這是一個動態可變的過程。指針和引用都是指明瞭對象在內存中的位置。
9: 只有通過指針和引用調用虛函數時,纔會運行時解析該調用,也只有在這種情況纔會發生動態綁定。
10:派生類中的虛函數參數列表必須與基類的想同。除了返回類型是類本身的指針和引用外,返回類型也必須相同。
11:如果一個函數被 override 標記了,但是該函數並沒有覆蓋已存在的虛函數,此時編譯器將會報錯。
12:一個函數也可以被標記爲 final ,表示該函數不可以被覆蓋了。