類的繼承與派生

一、            派生類生成過程

1.吸收基類成員。

2.改造基類成員。

3.擴充基類成員。

在類的派生中,構造函數和析構函數不能被派生。

派生類繼承了基類的全部數據成員和除了構造,析構之外的全部函數、成員。

二、            類的繼承方式有共有繼承、保護繼承、私有繼承三種

1.公有繼承。 基類的公有和保護成員的訪問屬性在派生類中不變,而基類的私有數據成員在派生類中不可訪問。

2.私有繼承。基類的公有保護成員以私有成員的身份出現在派生類中,而基類的私有成員不可訪問。如果進一步派生的話,基類的全部成員就無法在新的派生類中被訪問。實際上,相當於終止了基類功能的繼續派生。

3.保護繼承。基類的公有成員和保護成員以保護成員的身份出現在派生類中,而基類的私有成員不可訪問。

三、            派生類的構造函數

構造派生類的對象時,就要對基類數據成員、新增數據成員和成員對象的數

據成員進行初始化。基類的構造函數並沒有繼承下來,因此,派生類的構造函數需要以合適的初始值作爲參數,隱含調用基類和新增的內嵌對象成員的構造函數,來初始化它們各自的數據成員,然後再加入新的語句對新增普通數據成員進行初始化。

       派生類構造函數的一般語法形式爲:

      派生類名::派生類名(參數總表):基類名1(參數表1),……基類名n(參數表n,內嵌對象名1(內嵌對象參數表1),……內嵌對象名2(內嵌對象參數表2

{

              派生類新增成員的初始化語句

}

注意:

1.基類名、對象名之間的次序無關緊要,它們各自出現的順序可以是任意的。

2.對於使用默認構造函數的基類或對象,不需要寫出類名(對象名)和參數表。

派生類構造函數的執行次序一般爲:

1.調用基類的構造函數,按照它們被繼承時聲明的順序。

2.調用內嵌成員對象的構造函數,按照它們的聲明順序。

3.派生類構造函數體中的內容。

四、            虛基類

當類的部分或全部直接基類是從另一個共同基類派生而來的,在這些基類中

從上一級共同基類繼承來的成員就擁有相同的名稱。在派生類的的對象中,這些同名數據成員在內存中同時擁有多個拷貝,同一個函數名會有多個映射。我們可以用作用域分辨符來唯一標識並分別訪問它們,也可以將共同基類設置爲虛基類,這時從不同的路徑繼承過來的同名數據成員在內存中就只有一個拷貝,同一個函數名也只有一個映射。

例如:類B0是類B1B2的共同基類,類D由類B1B2共同派生而來。則應如下定義:

              Class B1: virtual public B0{…};

              Class B2: virtual public B0{…};

           Class D: public B1, public B2 { … };

五、            賦值兼容規則

指在需要基類對象的任何地方都可以使用派生類的對象來替代,包括以下三

種情況:

1.派生類的的對象可以賦值給基類對象。

2.派生類的對象可以初始化基類的引用。

3.派生類對象的地址可以賦給指向基類對象的指針。

在替代之後,派生類對象就可以作爲基類的對象使用,但只能使用從基類繼

承的成員。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章