一、基本概念
繼承是物件導向的程式設計的重要特色之一,它可以有效提高軟體的重用性。
若在已有類a的基礎上建立了乙個新類b,則稱類b繼承了類a,類a稱為基類或父類,類b稱為派生類或子類。
c++中,繼承又分單一繼承和多重繼承。若派生類只有乙個基類,則稱為單一繼承;若派生類的基類多於乙個,則稱為多重繼承。
1.單一繼承
其格式為:
class 派生類名:繼承方式 基類名
;//預設為private
或者struct 派生類名:繼承方式 基類名
;//預設為public
說明:(1)上述花括號內所列出的成員為派生類在基類成員的基礎上新增加的成員。
(2)在每個基類名前面的繼承方式可以是public、protected或private.
(3)繼承方式所影響的是派生類對基類的原有成員的訪問許可權,但基類中的私有成員在派生類中是不可訪問的,因此繼承方式實際影響的只是對基類中原有的公有成員和保護成員的訪問許可權。
繼承方式:
(1)公有派生:基類原有的公有成員和保護成員都保持原有的訪問許可權。
(2)保護派生:基類所有的公有成員和保護成員都成為派生類的保護成員。
(3)私有派生:基類的公有成員和保護成員都作為派生類的私有成員。
2.多重繼承
定義的格式為:
class 派生類名:繼承方式 基類名1,繼承方式 基類名2···
;二、初始化基類成員
建構函式是不可繼承的。因此,派生類的建構函式必須通過呼叫基類的建構函式初始化基類成員,不能夠在派生類初始化列表直接初始化基類的成員,「越級初始化」。派生類的建構函式的一般格式為:
派生類名(形參表):基類名1(形參表1),基類名2(形參表2)···
注意事項:
(1)在建立派生類物件時,先呼叫基類的建構函式,然後呼叫派生類的建構函式;撤銷物件時,析構函式被呼叫的順序則相反。
(2)若派生類中包含物件成員,則派生類的建構函式初始化成員列表中既要列出基類的建構函式也要列出物件的建構函式。派生類定義物件時,先呼叫基類的建構函式,再呼叫物件的建構函式,最後呼叫派生類的建構函式。
像 c++ primer習題15.16 (a)
struct
base
protected:
int id;
};struct c1:public
base
};編譯會產生如下錯誤:
1>./1508.cpp(12) : error c2512: 「base」: 沒有合適的預設建構函式可用
1>./1508.cpp(12) : error c2614: 「c1」: 非法的成員初始化:「id」不是基或成員
派生cl 嘗試直接初始化基類的id而出錯。應為base(val).
C 繼承和派生類
繼承和派生類 繼承性是物件導向程式設計中最重要的機制。這種機制提供了無限重複利用程式資源的一種途徑。通過c 語言中的繼承機制,可以擴充和完善舊的程式設計以適應新的需求。這樣不僅可以節省程式開發的時間和資源,並且為未來程式增添了新的資源。class student class studend1 利用原...
繼承 基類和派生類
說明派生類的生成和使用 include using namespace std class test1 基類 test1 int a x a void disp class test2 public test1 派生類 test2 int a,int b test1 a void disp intm...
多重繼承 派生類
作 者 劉慧豔 完成日期 2014 年6月20日 版 本 號 v1.0 問題描述 分別宣告teacher 教師 類和cadre 幹部 類,採用多重繼承方式 由這兩個類派生出新類teacher cadre 教師兼幹部 類。要求 1 在兩個基類中都包含姓名 年齡 性別 位址 等資料成員。2 在teach...