| 導購 | 订阅 | 在线投稿
分享
 
 
 

C++ 基類和派生類

來源:互聯網  2008-06-01 01:54:38  評論

本講討論基類和派生類的基本概念。

通過繼續機制,可以利用已有的數據類型來定義新的數據類型。所定義的新的數據類型不僅擁有新定義的成員,而且還同時擁有舊的成員。我們稱已存在的用來派生新類的類爲基類,又稱爲父類。由已存在的類派生出的新類稱爲派生類,又稱爲子類。

在C++語言中,一個派生類可以從一個基類派生,也可以從多個基類派生。從一個基類派生的繼續稱爲單繼續;從多個基類派生的繼續稱爲多繼續。

派生類的定義格式

單繼續的定義格式如下:

class <派生類名>:<繼續方式><基類名>

{

<派生類新定義成員>

};

其中,<派生類名>是新定義的一個類的名字,它是從<基類名>中派生的,並且按指定的<繼續方式>派生的。<繼續方式>常使用如下三種要害字給予表示:

public 表示公有基類;

private 表示私有基類;

protected 表示保護基類;

多繼續的定義格式如下:

class <派生類名>:<繼續方式1><基類名1>,<繼續方式2><基類名2>,…

{

<派生類新定義成員>

};

可見,多繼續與單繼續的區別從定義格式上看,主要是多繼續的基類多于一個。

派生類的三種繼續方式

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

1. 公有繼續(public)

公有繼續的特點是基類的公有成員和保護成員作爲派生類的成員時,它們都保持原有的狀態,而基類的私有成員仍然是私有的。

2. 私有繼續(private)

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

3. 保護繼續(protected)

保護繼續的特點是基類的所有公有成員和保護成員都成爲派生類的保護成員,並且只能被它的派生類成員函數或友元訪問,基類的私有成員仍然是私有的。

下面列出三種不同的繼續方式的基類特性和派生類特性。

不同繼續方式的基類和派生類特性

繼續方式

基類特性

派生類特性

公有繼續

public

public

protected

private

protected

不可訪問

私有繼續

public

private

protected

private

private

不可訪問

保護繼續

public

protected

protected

private

protected

不可訪問

爲了進一步理解三種不同的繼續方式在其成員的可見性方面的區別,下面從三種不同角度進行討論。

對于公有繼續方式:

(1) 基類成員對其對象的可見性:

公有成員可見,其他不可見。這裏保護成員同于私有成員。

(2) 基類成員對派生類的可見性:

公有成員和保護成員可見,而私有成員不可見。這裏保護成員同于公有成員。

(3) 基類成員對派生類對象的可見性:

公有成員可見,其他成員不可見。

所以,在公有繼續時,派生類的對象可以訪問基類中的公有成員;派生類的成員函數可以訪問基類中的公有成員和保護成員。這裏,一定要區分清楚派生類的對象和派生類中的成員函數對基類的訪問是不同的。

對于私有繼續方式:

(1) 基類成員對其對象的可見性:

公有成員可見,其他成員不可見。

(2) 基類成員對派生類的可見性:

公有成員和保護成員是可見的,而私有成員是不可見的。

(3) 基類成員對派生類對象的可見性:

所有成員都是不可見的。

所以,在私有繼續時,基類的成員只能由直接派生類訪問,而無法再往下繼續。

對于保護繼續方式:

這種繼續方式與私有繼續方式的情況相同。兩者的區別僅在于對派生類的成員而言,對基類成員有不同的可見性。

上述所說的可見性也就是可訪問性。關于可訪問性還有另的一種說法。這種規則中,稱派生類的對象對基類訪問爲水平訪問,稱派生類的派生類對基類的訪問爲垂直訪問。

一般規則如下:

公有繼續時,水平訪問和垂直訪問對基類中的公有成員不受限制;

私有繼續時,水平訪問和垂直訪問對基類中的公有成員也不能訪問;

保護繼續時,對于垂直訪問同于公有繼續,對于水平訪問同于私有繼續。

對于基類中的私有成員,只能被基類中的成員函數和友元函數所訪問,不能被其他的函數訪問。

基類與派生類的關系

任何一個類都可以派生出一個新類,派生類也可以再派生出新類,因此,基類和派生類是相對而言的。

基類與派生類之間的關系可以有如下幾種描述:

1. 派生類是基類的具體化

類的層次通常反映了客觀世界中某種真實的模型。在這種情況下,不難看出:基類是對若幹個派生類的抽象,而派生類是基類的具體化。基類抽取了它的派生類的公共特征,而派生類通過增加行爲將抽象類變爲某種有用的類型。

2. 派生類是基類定義的延續

先定義一個抽象基類,該基類中有些操作並未實現。然後定義非抽象的派生類,實現抽象基類中定義的操作。例如,虛函數就屬此類情況。這時,派生類是抽象的基類的實現,即可看成是基類定義的延續。這也是派生類的一種常用方法。

3. 派生類是基類的組合

在多繼續時,一個派生類有多于一個的基類,這時派生類將是所有基類行爲的組合。

派生類將其本身與基類區別開來的方法是添加數據成員和成員函數。因此,繼續的機制將使得在創建新類時,只需說明新類與已有類的區別,從而大量原有的程序代碼都可以複用,所以有人稱類是「可複用的軟件構件」。

  本講討論基類和派生類的基本概念。   通過繼續機制,可以利用已有的數據類型來定義新的數據類型。所定義的新的數據類型不僅擁有新定義的成員,而且還同時擁有舊的成員。我們稱已存在的用來派生新類的類爲基類,又稱爲父類。由已存在的類派生出的新類稱爲派生類,又稱爲子類。   在C++語言中,一個派生類可以從一個基類派生,也可以從多個基類派生。從一個基類派生的繼續稱爲單繼續;從多個基類派生的繼續稱爲多繼續。   派生類的定義格式   單繼續的定義格式如下:    class <派生類名>:<繼續方式><基類名>     {      <派生類新定義成員>     };   其中,<派生類名>是新定義的一個類的名字,它是從<基類名>中派生的,並且按指定的<繼續方式>派生的。<繼續方式>常使用如下三種要害字給予表示:    public 表示公有基類;    private 表示私有基類;    protected 表示保護基類;   多繼續的定義格式如下:    class <派生類名>:<繼續方式1><基類名1>,<繼續方式2><基類名2>,…     {      <派生類新定義成員>     };   可見,多繼續與單繼續的區別從定義格式上看,主要是多繼續的基類多于一個。   派生類的三種繼續方式    公有繼續(public)、私有繼續(private)、保護繼續(protected)是常用的三種繼續方式。   1. 公有繼續(public)   公有繼續的特點是基類的公有成員和保護成員作爲派生類的成員時,它們都保持原有的狀態,而基類的私有成員仍然是私有的。   2. 私有繼續(private)   私有繼續的特點是基類的公有成員和保護成員都作爲派生類的私有成員,並且不能被這個派生類的子類所訪問。   3. 保護繼續(protected)   保護繼續的特點是基類的所有公有成員和保護成員都成爲派生類的保護成員,並且只能被它的派生類成員函數或友元訪問,基類的私有成員仍然是私有的。   下面列出三種不同的繼續方式的基類特性和派生類特性。   不同繼續方式的基類和派生類特性 繼續方式 基類特性 派生類特性 公有繼續 public public protected private protected 不可訪問 私有繼續 public private protected private private 不可訪問 保護繼續 public protected protected private protected 不可訪問   爲了進一步理解三種不同的繼續方式在其成員的可見性方面的區別,下面從三種不同角度進行討論。   對于公有繼續方式:     (1) 基類成員對其對象的可見性:   公有成員可見,其他不可見。這裏保護成員同于私有成員。   (2) 基類成員對派生類的可見性:   公有成員和保護成員可見,而私有成員不可見。這裏保護成員同于公有成員。   (3) 基類成員對派生類對象的可見性:   公有成員可見,其他成員不可見。   所以,在公有繼續時,派生類的對象可以訪問基類中的公有成員;派生類的成員函數可以訪問基類中的公有成員和保護成員。這裏,一定要區分清楚派生類的對象和派生類中的成員函數對基類的訪問是不同的。   對于私有繼續方式:   (1) 基類成員對其對象的可見性:   公有成員可見,其他成員不可見。   (2) 基類成員對派生類的可見性:   公有成員和保護成員是可見的,而私有成員是不可見的。   (3) 基類成員對派生類對象的可見性:   所有成員都是不可見的。   所以,在私有繼續時,基類的成員只能由直接派生類訪問,而無法再往下繼續。   對于保護繼續方式:   這種繼續方式與私有繼續方式的情況相同。兩者的區別僅在于對派生類的成員而言,對基類成員有不同的可見性。   上述所說的可見性也就是可訪問性。關于可訪問性還有另的一種說法。這種規則中,稱派生類的對象對基類訪問爲水平訪問,稱派生類的派生類對基類的訪問爲垂直訪問。   一般規則如下:    公有繼續時,水平訪問和垂直訪問對基類中的公有成員不受限制;    私有繼續時,水平訪問和垂直訪問對基類中的公有成員也不能訪問;    保護繼續時,對于垂直訪問同于公有繼續,對于水平訪問同于私有繼續。   對于基類中的私有成員,只能被基類中的成員函數和友元函數所訪問,不能被其他的函數訪問。   基類與派生類的關系   任何一個類都可以派生出一個新類,派生類也可以再派生出新類,因此,基類和派生類是相對而言的。   基類與派生類之間的關系可以有如下幾種描述:    1. 派生類是基類的具體化    類的層次通常反映了客觀世界中某種真實的模型。在這種情況下,不難看出:基類是對若幹個派生類的抽象,而派生類是基類的具體化。基類抽取了它的派生類的公共特征,而派生類通過增加行爲將抽象類變爲某種有用的類型。    2. 派生類是基類定義的延續    先定義一個抽象基類,該基類中有些操作並未實現。然後定義非抽象的派生類,實現抽象基類中定義的操作。例如,虛函數就屬此類情況。這時,派生類是抽象的基類的實現,即可看成是基類定義的延續。這也是派生類的一種常用方法。    3. 派生類是基類的組合    在多繼續時,一個派生類有多于一個的基類,這時派生類將是所有基類行爲的組合。   派生類將其本身與基類區別開來的方法是添加數據成員和成員函數。因此,繼續的機制將使得在創建新類時,只需說明新類與已有類的區別,從而大量原有的程序代碼都可以複用,所以有人稱類是「可複用的軟件構件」。
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有