類的繼承與派生
一、派生類生成過程 1.
吸收基類成員。 2.
改造基類成員。 3.
擴充基類成員。
在類的派生中,建構函式和析構函式不能被派生。
派生類繼承了基類的全部資料成員和除了構造,析構之外的全部函式、成員。 二、
類的繼承方式有共有繼承、保護繼承、私有繼承三種 1.
公有繼承。
基類的公有和保護成員的訪問屬性在派生類中不變,而基類的私有資料成員在派生類中不可訪問。 2.
私有繼承。基類的公有保護成員以私有成員的身份出現在派生類中,而基類的私有成員不可訪問。如果進一步派生的話,基類的全部成員就無法在新的派生類中被訪問。實際上,相當於終止了基類功能的繼續派生。 3.
保護繼承。基類的公有成員和保護成員以保護成員的身份出現在派生類中,而基類的私有成員不可訪問。 三、
派生類的建構函式
構造派生類的物件時,就要對基類資料成員、新增資料成員和成員物件的數
據成員進行初始化。基類的建構函式並沒有繼承下來,因此,派生類的建構函式需要以合適的初始值作為引數,隱含呼叫基類和新增的內嵌物件成員的建構函式,來初始化它們各自的資料成員,然後再加入新的語句對新增普通資料成員進行初始化。
派生類建構函式的一般語法形式為:
派生類名::派生類名(引數總表):基類名1
(參數列1
),……
基類名n
(參數列n
),
內嵌物件名1
(內嵌物件參數列1
),……
內嵌物件名2
(內嵌物件參數列2
)
注意: 1.
基類名、物件名之間的次序無關緊要,它們各自出現的順序可以是任意的。 2.
對於使用預設建構函式的基類或物件,不需要寫出類名(物件名)和參數列。
派生類建構函式的執行次序一般為: 1.
呼叫基類的建構函式,按照它們被繼承時宣告的順序。 2.
呼叫內嵌成員物件的建構函式,按照它們的宣告順序。 3.
派生類建構函式體中的內容。 四、
虛基類
當類的部分或全部直接基類是從另乙個共同基類派生而來的,在這些基類中
從上一級共同基類繼承來的成員就擁有相同的名稱。在派生類的的物件中,這些同名資料成員在記憶體中同時擁有多個拷貝,同乙個函式名會有多個對映。我們可以用作用域分辨符來唯一標識並分別訪問它們,也可以將共同基類設定為虛基類,這時從不同的路徑繼承過來的同名資料成員在記憶體中就只有乙個拷貝,同乙個函式名也只有乙個對映。
例如:類
b0是類b1、
b2的共同基類,類d由類
b1、b2共同派生而來。則應如下定義:
class b1: virtual public b0;
class b2: virtual public b0;
class d: public b1, public b2 ;
五、賦值相容規則
指在需要基類物件的任何地方都可以使用派生類的物件來替代,包括以下三
種情況: 1.
派生類的的物件可以賦值給基類物件。 2.
派生類的物件可以初始化基類的引用。 3.
派生類物件的位址可以賦給指向基類物件的指標。
在替代之後,派生類物件就可以作為基類的物件使用,但只能使用從基類繼
承的成員。
類繼承與派生
繼承 1.在已有類的基礎上新增功能。2.新增資料。在派生類中新增指定字元。3.修改類方法的行為。派生 classa class b public a 一 說明 a是乙個公有基類 公有派生 則a.a的公有成員 成為b 的公有成員 b.a的 私有部分成為b 的一部分,但只能通過 a的公有和保護方法訪問。...
類的繼承與派生
儘管在派生類物件中含有從基類繼承而來的成員,但派生類並不能直接初始化這些成員,必須使用基類的建構函式來初始化它的基類成員。初始化順序 先初始化基類成員,在初始化自己新增成員。派生類可以訪問基類的公有成員和受保護成員。類的作用域分辨符。我們可以將基類的指標或引用繫結到派生類物件上,但反過來不行,不存在...
類的繼承與派生
乙個新類從已有的類獲得其已有特性,稱為類的繼承 從已有的類 父類 基類 產生乙個新的子類 派生類 稱為類的派生。因此,類的繼承與派生是同樣乙個過程的兩個方向的描述。單繼承 乙個派生類只從乙個基類派生 單繼承關係形成的層次是乙個樹形結構。箭頭由派生類指向基類。某乙個事物是由其他幾種事物構成的,那麼其他...