c 入門 繼承篇

2021-09-27 13:16:12 字數 2580 閱讀 3129

對於剛剛學完物件導向程式設計基礎的朋友,看到這裡的第乙個問題就是什麼是繼承,這個可以直接從字面意思上理解,你可以繼承其他人的財產,只要別人同意,同樣物件也可以繼承另乙個物件的函式與變數。

在繼承中,被繼承的類稱為基類或者父類,繼承該類的類稱為子類或者派生類。

繼承可以最大限度的實現**的復用。

下面給出繼承的簡單例項。

#include

using

namespace std;

classa;

void

disp()

};classb:

public a #類b繼承類a

;int

main()

在上述**中,我們定義了類a和類b,類b繼承類a,既類a稱為父類或者基類,類b稱為子類或者派生類。

基類

直接基類:b繼承a,則a為b的直接基類。

間接基類:c繼承b,b繼承a,則a為c的間接基類。

public和private派生

在兩種派生方法當中,主要的區別就是基類物件在派生類中是私有的還是公開的,下面這個**中歸納了一下。

派生方法

private

private

public

public

基類成員

private成員

public成員

private成員

public成員

派生類中

不可見private

不可見public

外部不可見

不可見不可見

可見可見無論採用那種方法基類的private成員在派生類中和外部都是不可見的,而public成員在private派生方法中,在派生類中是private的,public中的派生類中是public的。

3.protected派生

在上面的派生中,如果派生類在往下派生一類的話,那麼基類的變數便會不可以訪問了,為了解決這個問題,由此產生了protected派生。

protected

protected

protected

private

protected

public

不可見private

protected

不可見不可見

不可見乙個類繼承其他的多個類稱為多基派生。其宣告和定義為

派生類名(參數列):基類名1

(引數)

,基類名2

(引數),.

....

,基類名n

(引數n)

;

在多派生中會存在乙個二義性問題,下面通過**來說明。

#include

using

namespace std;

classa}

;classb}

;classc:

public a,

public b};

intmain()

在上述**中,類a和類b中都有print函式,類c繼承了a,b,在呼叫print函式的時候,編譯器就不知道是那個類中的print函式,這樣就出現了二義性。這個問題可以通過成員限定符來消除二義性。

a.a::

print()

;

虛基類又是為了解決什麼問題呢?這裡四個類a,b,c,d,假如說,類b繼承類a,類c也繼承類a,類d繼承類b和類c,這裡便會出現乙個問題,在類d中,會有兩個類a的複製。

這樣也會帶來二義性。例如說,在類d中要呼叫類a中的函式,那會會出現是通過類b再到類a,還是通過類c再到類b呢?這便產生了二義性。

我們可以通過宣告虛基類來消除類a在記憶體的雙重複製,虛基類的定義為:

class 派生類名:

virtual 派生方式 基類名

;

在回到上面的問題中,這時候如果我們類b繼承的是虛基類a,類c繼承的虛基類a,類d繼承類b和類c,那麼便不會出現記憶體**現兩個類a了,從而取消了二義性。

派生時,由於建構函式和析構函式是不能被繼承的,所以對派生類我們需要重新定義。在建立派生類物件時,系統首先通過派生類的析構函式來呼叫基類的建構函式,完成基類成員的初始化,而後對派生類中新增的成員進行初始化。

派生類建構函式的一般格式為

派生類名 (派生類構造函式引數列表): 基類建構函式(基類構造函式引數列表){};

必須將基類的建構函式放在派生類的初始化表示式中,一呼叫基類建構函式完成基類資料成員的初始化,派生類建構函式實現的功能如下:

完成物件所佔整塊記憶體的開闢,由系統在建構函式時自動完成。

呼叫基類的建構函式完成基類成員的初始化。

若派生類中含物件成員、const成員或引用成員,則必須在初始化表中初始化。

派生類建構函式體執行。

派生類的析構函式

在物件被刪除的時候,自動呼叫析構函式,其調順序為先派生類,後基類。

thank for your reading!

C 繼承入門

class 派生類 子類 名稱 繼承方式名 如public 基類 父類 名稱 1 公有繼承 public 當乙個類派生自公有基類時,基類的公有成員也是派生類的公有成員,基類的保護成員也是派生類的保護成員,基類的私有成員不能直接被派生類訪問,但是可以通過呼叫基類的公有和保護成員來訪問。對於基類的保護成...

C 之繼承篇

c 繼承篇 1 基本概念 繼承 inheritance 機制是物件導向程式設計使 可以復用的最重要的手段,它允許程式設計師在保持 原有類特性的基礎上進行擴充套件,增加功能。這樣產生新的類,稱派生類。繼承呈現了物件導向程式設 計的層次結構,體現了由簡單到複雜的認知過程。2 繼承格式及特性 class ...

C 之繼承篇

1.繼承許可權 繼承許可權與訪問許可權 public 公有訪問 protected 保護訪問 private 私有訪問 public 公有繼承 繼承後變成public 公有訪問 繼承後變成protected 保護訪問 繼承後不可訪問 protected 保護繼承 繼承後變成protected 保護訪...