繼承:一旦指定了某種事物的父代的本質特徵,那麼它的子代將會自動具有那些性質,這就是一種樸素的可重用的概念。
派生:子代可以擁有父代沒有的特性,這就是可擴充的概念
繼承就是在已經存在的基礎上建立乙個新的類,已存在的類稱為基類或父類,新建立的類稱為派生類或子類。
派生類的功能:
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 派生類名 繼承方式 基類名 派生類新增加的...