在我們前面學(xué)習(xí)過類中的構(gòu)造函數(shù),以及析構(gòu)函數(shù),那么自然而然,在繼承關(guān)系中,必然是存在著析構(gòu)和構(gòu)造著。
一、子類對(duì)象的構(gòu)造
1、問題的引出
如何初始化父類成員?
父類構(gòu)造函數(shù)和子類構(gòu)造函數(shù)有什么關(guān)系?
2、子類中的構(gòu)造函數(shù)怎樣初始化父類成員:
子類中也是可以定義構(gòu)造函數(shù)的:
--必須對(duì)繼承而來的成員進(jìn)行初始化,那么怎樣初始化呢?這里有兩種方式:
-直接通過初始化列表或者賦值的方式進(jìn)行初始化
-調(diào)用父類構(gòu)造函數(shù)進(jìn)行初始化
3、父類構(gòu)造函數(shù)在子類中的調(diào)用方式
默認(rèn)調(diào)用
-適用于無參構(gòu)造函數(shù)和使用默認(rèn)參數(shù)的構(gòu)造函數(shù)
顯示調(diào)用
-通過初始化列表進(jìn)行調(diào)用
-適用于所有父類構(gòu)造函數(shù)
實(shí)踐代碼模板:
代碼實(shí)踐:
輸出結(jié)果:
注解:通過上面的代碼輸出結(jié)果,我們可以發(fā)現(xiàn),子類定義的對(duì)象如果沒有沒有傳參,就隱式調(diào)用父類的構(gòu)造函數(shù);當(dāng)然上面也使用了顯示調(diào)用,通過初始列表的就可以看出。
4、構(gòu)造規(guī)則
子類對(duì)象在創(chuàng)建時(shí)會(huì)首先調(diào)用父類的構(gòu)造函數(shù)
先執(zhí)行父類構(gòu)造函數(shù)再執(zhí)行子類的構(gòu)造函數(shù)
父類構(gòu)造函數(shù)可以被隱式調(diào)用或者顯示調(diào)用
5、對(duì)象創(chuàng)建時(shí)構(gòu)造函數(shù)的調(diào)用順序
(1)調(diào)用父類的構(gòu)造函數(shù)
(2)調(diào)用成員變量的構(gòu)造函數(shù)
(3)調(diào)用類自身的構(gòu)造函數(shù)
總結(jié):先父母,后客人,再自己
代碼實(shí)踐:
輸出結(jié)果:
注解:我們可以看到,先定義了一個(gè)Child對(duì)象,然后最先訪問Object帶參構(gòu)造函數(shù),然后再是Parent帶參構(gòu)造函數(shù)(說白了就是父類先觸發(fā)),然后在子類Child中又包含了組合關(guān)系(也就是客人),然后Object類中的帶參構(gòu)造函數(shù),最后再觸發(fā)自身的帶參構(gòu)造函數(shù)。
二、子類對(duì)象的析構(gòu)
1、析構(gòu)函數(shù)的調(diào)用順序與構(gòu)造函數(shù)相反
(1)執(zhí)行自身的析構(gòu)函數(shù)
(2)執(zhí)行成員變量的析構(gòu)函數(shù)
(3)執(zhí)行父類的析構(gòu)函數(shù)
代碼實(shí)踐:
輸出結(jié)果:
三、總結(jié):
子類對(duì)象在創(chuàng)建時(shí)需要調(diào)用父類構(gòu)造函數(shù)進(jìn)行初始化
先執(zhí)行父類構(gòu)造函數(shù)然后執(zhí)行成員的構(gòu)造函數(shù)
父類構(gòu)造函數(shù)顯示調(diào)用需要在初始化列表中進(jìn)行
子類對(duì)象在銷毀時(shí)需要調(diào)用父類析構(gòu)函數(shù)進(jìn)行清理
析構(gòu)順序與構(gòu)造順序?qū)ΨQ相反
-
可編程邏輯
+關(guān)注
關(guān)注
7文章
526瀏覽量
44764 -
C++
+關(guān)注
關(guān)注
22文章
2119瀏覽量
75328
發(fā)布評(píng)論請(qǐng)先 登錄
C++學(xué)到什么程度可以找工作?
Spire.XLS for C++組件說明

EE-112:模擬C++中的類實(shí)現(xiàn)

運(yùn)動(dòng)控制卡周期上報(bào)實(shí)時(shí)數(shù)據(jù)IO狀態(tài)之C++篇

同樣是函數(shù),在C和C++中有什么區(qū)別
C語言中申請(qǐng)的堆內(nèi)存能不能自動(dòng)釋放
C7000優(yōu)化C/C++編譯器

ostream在c++中的用法
基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)類庫案例:SafeQueue

基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)類庫案例:SafeStack

評(píng)論