對於剛剛學完物件導向程式設計基礎的朋友,看到這裡的第乙個問題就是什麼是繼承,這個可以直接從字面意思上理解,你可以繼承其他人的財產,只要別人同意,同樣物件也可以繼承另乙個物件的函式與變數。
在繼承中,被繼承的類稱為基類或者父類,繼承該類的類稱為子類或者派生類。
繼承可以最大限度的實現**的復用。
下面給出繼承的簡單例項。
#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 保護訪...