前面分析過繼承,繼承使得子類可以繼承父類的屬性和方法,但是構造和析構除外。
首先我們要清除,建構函式的職責是用來初始化類的物件的,建構函式在類的物件之前執行,而繼承是子類的呼叫父類的屬性和方法,父類的物件都沒建立你怎麼去呼叫,因此構造析構不能被繼承。
拷貝建構函式和拷貝賦值操作符會不會被繼承?之前也分析過,在執行拷貝建構函式和拷貝賦值操作符之前需要呼叫建構函式來初始化類的物件的。想一想連物件都沒有,你怎麼在子類中呼叫父類的屬性和方法。
1、子類物件在建立時會首先呼叫父類的建構函式
2、父類建構函式執行結束後,執行子類的建構函式
3、當父類的建構函式有引數時,需要在子類的初始化列表中顯示呼叫
4、析構函式呼叫的先後順序與建構函式相反
是指在需要父類物件的地方,可以用公有派生類(子類)物件來代替。因為公有派生類(子類)可以繼承除構造和析構之外的所有成員,這樣公有派生類(子類)就具備了父類的所有功能,凡是父類可以解決的問題,公有派生類(子類)都可以解決。
相容規則中所指的替代包括以下情況:
1.子類物件可以當做父類物件使用
2.子類物件可以直接賦值給父類物件
3.子類物件可以直接初始化父類物件
4.父類指標可以直接指向子類物件
5.父類引用可以直接引用子類物件
class parent
void howtoprint2(parent &base)
//main
執行結果:
繼承中的構造和析構
子類的建構函式必須對繼承而來的成員進行初始化 1.直接通過初始化列表或者賦值的方式進行初始 2.呼叫父類建構函式進行初始化 父類建構函式在子類中的呼叫方式 1.預設呼叫.適用無參建構函式和使用預設引數的建構函式 2.顯示呼叫.通過初始化列表進行呼叫,適用於所有父類的建構函式 例子 class chi...
繼承中構造析構
在繼承中面臨乙個問題就是 我們的基類和派生類都有各自的建構函式和析構函式,那麼再例項化派生類成員的時候,這個構造析構的順序是怎麼樣的呢?class animal animal void setm int a 0 intgetage private int age 我們構造了個動物類,我們需要繼續構造...
繼承中的構造和析構函式
子類物件在建立時首先會呼叫父類的建構函式,在父類的建構函式執行結束後,再執行子類的建構函式。當父類的建構函式有引數時,需要在子類的初始化列表中顯示呼叫。析構函式的呼叫的先後順序與建構函式相反 結論 建構函式 先呼叫父類 再呼叫子類 析構函式 先呼叫子類 再呼叫父類 如下所示 include usin...