国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C++ 基類和派生類

2019-11-17 05:14:10
字體:
來源:轉載
供稿:網友

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

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

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

  派生類的定義格式

  單繼續的定義格式如下:

   class <派生類名>:<繼續方式><基類名>
    {
     <派生類新定義成員>
    };

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

   public 表示公有基類;

   PRivate 表示私有基類;

   protected 表示保護基類;

  多繼續的定義格式如下:

   class <派生類名>:<繼續方式1><基類名1>,<繼續方式2><基類名2>,…
    {
     <派生類新定義成員>
    };

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

  派生類的三種繼續方式

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

  1. 公有繼續(public)

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

  2. 私有繼續(private)

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

  3. 保護繼續(protected)

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

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

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

繼續方式基類特性派生類特性公有繼續public publicprotected
privateprotected
不可訪問
私有繼續public privateprotected
private private
不可訪問
保護繼續public protectedprotected
private protected
不可訪問
  為了進一步理解三種不同的繼續方式在其成員的可見性方面的區別,下面從三種不同角度進行討論。

  對于公有繼續方式:
 
  (1) 基類成員對其對象的可見性:

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

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

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

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

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

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

  對于私有繼續方式:

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

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

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

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

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

  所有成員都是不可見的。

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

  對于保護繼續方式:

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

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

  一般規則如下:

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

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

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

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

  基類與派生類的關系

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

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

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

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

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

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

   3. 派生類是基類的組合

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

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 保亭| 涡阳县| 英山县| 安义县| 洪江市| 敦化市| 北京市| 嘉义市| 高淳县| 云霄县| 仪征市| 梨树县| 安新县| 武山县| 通榆县| 大余县| 长春市| 峨眉山市| 安龙县| 都昌县| 温宿县| 同江市| 深水埗区| 云浮市| 迭部县| 东乡| 宁城县| 呼和浩特市| 时尚| 札达县| 枣阳市| 新兴县| 连州市| 封开县| 惠安县| 扎囊县| 泗洪县| 克东县| 休宁县| 上栗县| 岫岩|