C 基類和派生類

2021-04-18 10:43:08 字數 1761 閱讀 3390

本講討論基類和派生類的基本概念。   通過繼承機制,可以利用已有的資料型別來定義新的資料型別。所定義的新的資料型別不僅擁有新定義的成員,而且還同時擁有舊的成員。我們稱已存在的用來派生新類的類為基類,又稱為父類。由已存在的類派生出的新類稱為派生類,又稱為子類。   在c++語言中,乙個派生類可以從乙個基類派生,也可以從多個基類派生。從乙個基類派生的繼承稱為單繼承;從多個基類派生的繼承稱為多繼承。

單繼承的定義格式如下:    class 《派生類名》:《繼承方式》《基類名》     ;

多繼承的定義格式如下:    class 《派生類名》:《繼承方式1>《基類名1>,《繼承方式2>《基類名2>,…     ;

可見,多繼承與單繼承的區別從定義格式上看,主要是多繼承的基類多於乙個。   派生類的三種繼承方式

公有繼承(public)、私有繼承(private)、保護繼承(protected)是常用的三種繼承方式。   1. 公有繼承(public)

私有繼承的特點是基類的公有成員和保護成員都作為派生類的私有成員,並且不能被這個派生類的子類所訪問。

3. 保護繼承(protected)

保護繼承的特點是基類的所有公有成員和保護成員都成為派生類的保護成員,並且只能被它的派生類成員函式或友元訪問,基類的私有成員仍然是私有的。   下面列出三種不同的繼承方式的基類特性和派生類特性。   不同繼承方式的基類和派生類特性

繼承方式

基類特性

派生類特性

公有繼承

public

public

protected private

protected 不可訪問

私有繼承

public

private

protected private

private 不可訪問

保護繼承

public

protected

protected private

protected 不可訪問

公有成員可見,其他不可見。這裡保護成員同於私有成員。   (2) 基類成員對派生類的可見性:

公有成員和保護成員可見,而私有成員不可見。這裡保護成員同於公有成員。   (3) 基類成員對派生類物件的可見性:   公有成員可見,其他成員不可見。

所以,在公有繼承時,派生類的物件可以訪問基類中的公有成員;派生類的成員函式可以訪問基類中的公有成員和保護成員。這裡,一定要區分清楚派生類的物件和派生類中的成員函式對基類的訪問是不同的。   對於私有繼承方式:   (1) 基類成員對其物件的可見性:   公有成員可見,其他成員不可見。   (2) 基類成員對派生類的可見性:

公有成員和保護成員是可見的,而私有成員是不可見的。   (3) 基類成員對派生類物件的可見性:   所有成員都是不可見的。   所以,在私有繼承時,基類的成員只能由直接派生類訪問,而無法再往下繼承。

對於保護繼承方式:   這種繼承方式與私有繼承方式的情況相同。兩者的區別僅在於對派生類的成員而言,對基類成員有不同的可見性。一般規則如下:    公有繼承時,水平訪問和垂直訪問對基類中的公有成員不受限制;    私有繼承時,水平訪問和垂直訪問對基類中的公有成員也不能訪問;

保護繼承時,對於垂直訪問同於公有繼承,對於水平訪問同於私有繼承。   對於基類中的私有成員,只能被基類中的成員函式和友元函式所訪問,不能被其他的函式訪問。基類與派生類的關係任何乙個類都可以派生出乙個新類,派生類也可以再派生出新類,因此,基類和派生類是相對而言的。   基類與派生類之間的關係可以有如下幾種描述:    1. 派生類是基類的具體化

C 基類和派生類

本講討論基類和派生類的基本概念。通過繼承機制,可以利用已有的資料型別來定義新的資料型別。所定義的新的資料型別不僅擁有新定義的成員,而且還同時擁有舊的成員。我們稱已存在的用來派生新類的類為基類,又稱為父類。由已存在的類派生出的新類稱為派生類,又稱為子類。在 c 語言中,乙個派生類可以從乙個基類派生,也...

C 基類和派生類

通過繼承機制,可以利用已有的資料型別來定義新的資料型別。所定義的新的資料型別不僅擁有新定義的成員,而且還同時擁有舊的成員。我們稱已存在的用來派生新類的類為基類,又稱為父類。由已存在的類派生出的新類稱為派生類,又稱為子類。在c 語言中,乙個派生類可以從乙個基類派生,也可以從多個基類派生。從乙個基類派生...

C 基類和派生類

基類和派生類關係 任何乙個類都有可以派生出上個新類,派生類也可以再派生出新類,因此,基類和派生類是相對而言的。乙個基類可以是另乙個基類的派生類,這樣便形成了複雜的繼承結構,出現了類的層次。乙個基類派生出乙個派生類,它又做另乙個派生類的基類,則原來基類為該派生類的間接基類。基類與派生類之間的關係可以有...