(一)繼承
派生類對象儲存了基類的數據成員(派生類繼承了基類的實現)
派生類對象可以使用基類的方法(派生類繼承了基類的接口)
派生類需要自己的構造函數
派生類可以根據自己的需要額外添加數據成員和成員函數
構造函數必須給新成員跟繼承的成員提供數據
派生類不能訪問基類的私有成員,必須通過基類方法進行討論
派生類構造函數必須使用基類構造函數
創建派生類對象時首先要創建基類對象(成員初始化列表)非構造函數不能使用此方法
派生類構造函數應初始化派生類新增的數據成員
釋放對象的方法跟創建對象的方法相反,先執行派生類的析構函數,在執行基類的析構函數
(二)多態繼承
在派生類中重新定義基類的方法
派生類的成員可以直接訪問基類的保護成員(protected)
使用虛函數
隱式強制向上轉換使基類指針或引用可以指向基類對象和派生類對象,要使用動態聯編,用虛成員函數滿足
編譯器對非虛方法使用靜態聯編,對虛方法是動態聯編
構造函數不能是虛函數,析構函數是虛函數,通常應該給基類提供一個虛析構函數
友元不能是虛函數
如果沒有virtual關鍵字,程序根據引用類型和指針類型選擇方法,有關鍵字,根據引用和指針指向的對象類型來選擇方法
方法在基類中聲明爲虛,在派生類中自動爲虛函數
小結:如果要在派生類中重新定義基類的方法,應將基類方法聲明爲虛的,在基類中聲明一個虛析構函數也是一種慣例
當基類和派生類都使用動態內存分配,派生類的析構函數,複製構造函數,賦值運算符都必須使用相應的基類方法處理基類元素
對於析構函數是自動完成的,構造函數,是初始化成員列表中調用基類的複製構造函數,複製運算符是通過作用域解析運算符顯式調用基類的賦值運算符來完成的。這三不能繼承