1、繼承,動态綁定,資料抽象一起成為面向對象程式設計的基礎。
2、模闆使我們能夠編寫獨立于具體類型的泛型類和泛型函數。在C++中,用類進行資料抽象,用類派生從一個類繼承另一個類:派生類繼承基類的成員。動态綁定使編譯器能夠在運作時決定是使用基類中定義的函數還是類中定義的函數。
3、C++中,多态性僅用于通過繼承而相關聯的類型的引用或指針。
4、定義為virtual的函數是基類期待派生類重新定義的。保留字virtual隻在類内部的成員函數聲明中出現。
5、一旦函數在基類中聲明為虛函數,它就一直為虛函數。
6、派生類對象由多個部分組成:派生類本身定義的(非static)成員加上由基類(非static)成員組成的子對象。
7、已定義的類才可以作為基類。
8、如果需要聲明(但并不實作)一個派生類,則先聲明包含類名但不包含派生清單。
示例
9、要觸發動态綁定,要滿足兩個條件:(1)隻有指定為虛成員函數才能動态綁定;(2)必須通過基類類型的引用或指針進行函數調用。
基類類型的引用或指針可以引用基類類型對象,也可以引用派生類型對象。
10、基類類型引用和指針的關鍵點在于靜态類型(在編譯時可知的引用類型或指針類型)和動态類型(指針或引用所綁定的對象的類型這是僅在運作時可知的)可能不同。
引用和指針的靜态類型與動态類型可以不同,這是C++可以支援多态性的基石。
11、覆寫虛函數機制
有時,希望覆寫虛函數機制并強制函數調用使用虛函數的特定版本,可以使用作用域操作符:
12、派生類虛函數調用基類版本時,必須顯式使用作用域操作符。如果派生類函數忽略了這樣做,則函數調用會在運作時确定并且将是一個自身調用,進而導緻無窮遞歸。(指的是在派生類虛函數中調用基類的同名的函數,進而讓基類做一些必要的工作)
13、像其他任何函數一樣,虛函數也可以有預設實參。通常,如果有用在給定調用中的預設實參值,該值将在編譯時确定。如果一個調用省略了具有預設值的實參,則所用的值由調用該函數的類型定義,與對象的動态類型無關。通過基類的引用或指針調用虛函數時,預設實參為在基類虛函數聲明中指定的值,如果通過派生類的指針或引用調用虛函數,則預設實參是在派生類的版本中聲明的值。
在同一虛函數的基類版本和派生類版本中使用不同的預設實參幾乎一定會引起麻煩。如果通過基類的引用或指針調用虛函數,但實際執行的是派生類中定義的版本,這時就可能會出現問題。在這種情況下,為虛函數的基類版本定義的預設實參将傳給派生類定義的版本,而派生類版本是用不同的預設實參定義的。
14、如果成員在基類中為private,則隻有基類和基類的友元可以通路該成員。

15、接口繼承和實作繼承
public派生類繼承基類的的接口,它具有與基類相同的接口,稱為接口繼承。
private和protected派生的類不繼承基類的接口,稱為實作繼承。派生類的實作中使用被繼承類但繼承基類的部分并未成為其接口的一部分。
16、繼承:反映的是is a的關系。組合反映的是has a的關系。
17、可以通過using聲明通路基類中的名字(使用private繼承才有這個必要)。
18、使用class保留字定義的派生類預設具有private繼承,而用struct保留字定義的類預設具有public繼承。這是他們唯一的差別:預設的成員保護級别和預設的派生保護級别。
19、友元關系和繼承
友元關系不能繼承。基類的友元對從該基類派生的類沒有特殊通路權限。
在http://www.cnblogs.com/mydomain/archive/2011/03/22/1991244.html中,我經過VS2008編譯環境測試得出友元關系可以繼承。而C++ Primer 4th中第15章講到這個情況時說不能繼承。對其例子進行了測試,發現也是可以通過編譯的。
應當是編譯環境的問題。
20、繼承和靜态成員
如果基類定義 static 成員,則整個繼承層次中隻有一個這樣的成員。無論從基類派生出多少個派生類,每個 static 成員隻有一個執行個體。static 成員遵循正常通路控制:如果成員在基類中為 private,則派生類不能通路它。假定可以通路成員,則既可以通過基類通路 static 成員,也可以通過派生類通路 static 成員。一般而言,既可以使用作用域操作符也可以使用點或箭頭成員通路操作符。
參考