1. 程式人生 > >繼承與派生的區別和聯絡

繼承與派生的區別和聯絡

  繼承與派生其實是同一過程從不同的角度看,我們將保持已有類的特性而構造新類的過程稱為繼承,說白了繼承的目的就是實現原來設計與程式碼的重用,希望儘量利用原有的類。然而當新的問題出現,原有程式無法解決或不能完全解決時,需要對原有程式進行改造,在已有類的基礎上新增自己的特性而產生新類的過程稱為派生。相關重要概念整理如下:

基類(或父類):被繼承的原有類
直接基類:直接參與派生出某類的基類
間接基類: 基類的基類甚至更高層的基類
派生類(或子類): 派生出的新類 包括三部分
1)吸收基類的成員:預設情況下派生類包含了基類除了建構函式和解構函式之外的所有成員,但是C++11規定可以用using關鍵字將建構函式也繼承過來。
2)改造基類的成員:如果派生類聲明瞭一個和基類成員同名的新成員,這樣基類同名的成員就被覆蓋了。
3)新增新的成員:派生類在功能上有所發展。
單繼承(派生類只從一個直接基類繼承)時派生類的定義:


class 派生類名:繼承方式 基類名
{
新增成員宣告;
}

多繼承時派生類的定義:
class 派生類名:繼承方式1 基類名1,繼承方式2 基類名2,…
{
成員宣告;
}
注意:每一個“繼承方式”,只用於限制對緊隨其後之基類的繼承。

三種繼承方式:公有繼承,私有繼承和保護繼承

公有繼承(public)
1)繼承的訪問控制
基類的public和protected成員:訪問屬性在派生類中保持不變;
基類的private成員:不可直接訪問。
2)訪問許可權
派生類中的成員函式:可以直接訪問基類中的public和protected成員,但不能直接訪問基類的private成員;
通過派生類的物件:只能訪問public成員。
3)公有派生類物件可以被當作基類的物件使用,反之則不可。
派生類的物件可以隱含轉換為基類物件;
派生類的物件可以初始化基類的引用;
派生類的指標可以隱含轉換為基類的指標。
通過基類物件名、指標只能使用從基類繼承的成員,派生類新增的成員就不能使用了。