1. 使用公有派生,基類的公有成員將成爲派生類的共有成員;基類的私有部分也將成爲派生類的一部分,但只能通過基類的公有和保護方法訪問。
2. 派生類構造函數必須使用基類構造函數,意味着基類對象應當在程序進入派生類構造函數之前被創建。如果不調用基類構造函數,程序將使用默認的基類構造函數。
3. 可將派生類對象和地址賦給基類引用和指針,被稱爲向上強制轉換,不需進行顯式類型轉換,其中基類指針或引用只能用於調用基類方法;不可以將基類對象和地址賦給派生類引用和指針,被稱爲向下強制轉換,若不使用顯式類型轉換,則不允許向下強制轉換。引用兼容性屬性使得能夠將基類對象初始化爲派生對象。
4. 公有繼承:建立一種is-a關係,即派生類對象也是一個基類對象,可以對基類對象執行的任何操作也可以對派生類對象執行。
5. 如果沒有使用關鍵字virtual,程序將根據引用類型或指針類型選擇方法;若使用了virtual,程序將根據引用或指針指向的對象的類型來選擇方法。因此,經常在基類中將派生類會重新定義的方法聲明爲虛方法,方法在基類中被聲明爲虛的後,它在派生類中將自動成爲虛方法。
注意:關鍵字virtual只用於類聲明的方法原型中。
6. 編譯器對非虛方法使用靜態聯編,對虛方法使用動態聯編。靜態聯編效率更高。
7. 構造函數不能是虛函數;
析構函數應當是虛函數,除非類不用做基類;
友元不能是虛函數,因爲友元不是類成員,只有成員才能是虛函數。
8. 對於外部世界來說,保護成員的行爲與私有成員相似;但對派生類來說,保護成員的行爲與公有成員相似。
9. 當類聲明中包含純虛函數時,只用作基類,即抽象基類(ABC),不能創建該類的對象。純虛函數聲明的結尾處爲=0,在類中不能定義純虛函數。
注意:ABC描述的是至少使用一個純虛函數的接口。
10. 構造函數、析構函數、賦值運算符不能繼承。