繼承與派生

2021-10-06 02:19:14 字數 2437 閱讀 8564

繼承:一旦指定了某種事物的父代的本質特徵,那麼它的子代將會自動具有那些性質,這就是一種樸素的可重用的概念。

派生:子代可以擁有父代沒有的特性,這就是可擴充的概念

繼承就是在已經存在的基礎上建立乙個新的類,已存在的類稱為基類或父類,新建立的類稱為派生類或子類。

派生類的功能:

1、吸收基類成員

2、改造基類成員

3、新增新成員

單繼承和多繼承

單繼承:派生類只有乙個直接基類。

語法格式:class 派生類名:《繼承方式》 基類名;

由繼承方式的不同而導致的繼承成員訪問屬性的改變

基類:          公有成員 私有成員    保護成員

公有派生類:公有成員 不可訪問成員 保護成員

私有派生類:私有成員 不可訪問成員 私有成員

保護派生類:保護成員 不可訪問成員 保護成員

不可訪問成員 :在類外不能被直接訪問,在派生類的類內不能被直接訪問。

派生類與基類同名成員的訪問方式:

c++允許派生類可以重新定義基類成員,此時稱派生類成員覆蓋了基類的同名成員。

如果在派生類中,想使用基類的同名成員,則可以顯式地使用用類名+限定符的方式:

基類名::成員名

單繼承派生類的建構函式

派生類建構函式(參數列):基類建構函式(參數列),物件成員1(參數列),…物件成員函式n(參數列),

class

circle

}class

colorcircle

:public circle

如果基類使用的是預設的建構函式或不帶引數的建構函式,那麼在初始化列表中可以省略:基類建構函式這已項,物件成員引數列表同理。

建構函式和析構函式的呼叫順序

建構函式: 1、呼叫基類建構函式 2、再呼叫物件成員所屬類的建構函式 3、最後呼叫派生類建構函式;

析構函式:1、先呼叫派生類析構函式 2、再呼叫物件成員析構函式 3、最後呼叫基類建構函式。恰好與建構函式的呼叫相反。

class

base

~base()

};class

derived

:public base

~derived()

}; int

main()

;多繼承派生類建構函式,和析構函式的執行順序與單繼承派生類一致。

多繼承存在乙個問題,當訪問不同基類的同名成員時,會存在二義性。

解決辦法:用類名對成員進行加以限定,列如:

c1.a::f();或者c1.b::f();其中c1時、是派生類名,a和b則是基類名,::命名空間,f()是基類中的成員。

訪問共同基類成員的二義性:當乙個派生類物件是由兩個基類成員派生而來。並且兩個基類成元是由同乙個派生類物件派生來時,此時如果我們想要訪問最初的那個基類函式的成員1時,也會出現二義。

解決辦法:cobj.b1::a=9或cobj.b2::a=9;

其中cobj是派生類物件,b1是派生類的基類物件,a是b1內多成員函式。其實質訪問的是派生類的基類的基類內部成員。

虛基類

類a是派生類d兩條繼承路徑上的乙個公共基類,

因此這個公共基類會在派生類物件中產生兩個基類子物件,雖然可以通過限定符的方式避免二義性,但如果我們不需要在派生類物件中存在多個基類物件的拷貝。因此如果要使在公共基類在派生類中只產生乙個基類子物件,則需要將這個基類設定為虛基類。+virtual。

class

base

;class

base2

;class

level1

:public base2,

virtual

public base

;class

level2

:public base2,

virtual

public base

;class

toplevel

:public level1,

virtual

public level2

;//當宣告toplevel類的物件時,建構函式的呼叫次序為:

//base base2 level2 base2 level1 toplevel;

//虛構函式首先呼叫,並且只呼叫一次。

派生與繼承 多重派生

1 理解下面的程式,並在 vc 6.0 下執行檢視結果,回答程式後面的問題。class cbase1 cbase1 void print protected int a class cbase2 cbase2 void print protected int b class cderive publ...

繼承與派生

實驗內容 建立乙個基類,兩個派生類,讓每乙個派生類都包含乙個函式area 分別用來返回矩形和三角形的面積。用建構函式對height和width進行初始化。要求通過基類指標訪問虛函式的方法。純虛函式 virtual double area 0 純虛函式的作用是在基類中為派生類保留乙個函式的名字,以便派...

繼承與派生

在c 中,所謂 繼承 就是在乙個已存在的類的基礎上建立乙個新的類。已存在的類成為 基類 新建立的類成為 派生類 乙個新類從已有的類那裡獲得其已有特性,這種現象成為累的繼承。從另一角度說,從已有的類產生乙個新的子類,稱謂累的派生。派生類的宣告方式 class 派生類名 繼承方式 基類名 派生類新增加的...