在我們前面學習過類中的構造函數,以及析構函數,那么自然而然,在繼承關系中,必然是存在著析構和構造著。
一、子類對象的構造
1、問題的引出
如何初始化父類成員?
父類構造函數和子類構造函數有什么關系?
2、子類中的構造函數怎樣初始化父類成員:
子類中也是可以定義構造函數的:
--必須對繼承而來的成員進行初始化,那么怎樣初始化呢?這里有兩種方式:
-直接通過初始化列表或者賦值的方式進行初始化
-調用父類構造函數進行初始化
3、父類構造函數在子類中的調用方式
默認調用
-適用于無參構造函數和使用默認參數的構造函數
顯示調用
-通過初始化列表進行調用
-適用于所有父類構造函數
實踐代碼模板:
代碼實踐:
輸出結果:
注解:通過上面的代碼輸出結果,我們可以發現,子類定義的對象如果沒有沒有傳參,就隱式調用父類的構造函數;當然上面也使用了顯示調用,通過初始列表的就可以看出。
4、構造規則
子類對象在創建時會首先調用父類的構造函數
先執行父類構造函數再執行子類的構造函數
父類構造函數可以被隱式調用或者顯示調用
5、對象創建時構造函數的調用順序
(1)調用父類的構造函數
(2)調用成員變量的構造函數
(3)調用類自身的構造函數
總結:先父母,后客人,再自己
代碼實踐:
輸出結果:
注解:我們可以看到,先定義了一個Child對象,然后最先訪問Object帶參構造函數,然后再是Parent帶參構造函數(說白了就是父類先觸發),然后在子類Child中又包含了組合關系(也就是客人),然后Object類中的帶參構造函數,最后再觸發自身的帶參構造函數。
二、子類對象的析構
1、析構函數的調用順序與構造函數相反
(1)執行自身的析構函數
(2)執行成員變量的析構函數
(3)執行父類的析構函數
代碼實踐:
輸出結果:
三、總結:
子類對象在創建時需要調用父類構造函數進行初始化
先執行父類構造函數然后執行成員的構造函數
父類構造函數顯示調用需要在初始化列表中進行
子類對象在銷毀時需要調用父類析構函數進行清理
析構順序與構造順序對稱相反
審核編輯:符乾江
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
相關推薦
Spire.XLS for C++ 是一款專業的 C++ Excel 組件,可以用在各種 C++ 框架和應用程序中。Spire.XLS for C+
發表于 01-14 09:40
?145次閱讀
電子發燒友網站提供《EE-112:模擬C++中的類實現.pdf》資料免費下載
發表于 01-03 15:15
?0次下載
使用C++進行運動控制卡的周期上報功能實現
發表于 12-17 13:59
?342次閱讀
同樣是函數,在 C 和 C++ 中有什么區別? 第一個返回值。 C語言的函數可以不寫返回值類型,編譯器會默認為返回 int。 但是 C++ 的函數,除了
發表于 11-29 10:25
?429次閱讀
C語言中申請的堆內存能不能自動釋放?每次都要手動 free 太麻煩,也容易忘記。 學過 C++ 的同學,應該首先能想到智能指針。 但是這是C語言,沒有類和對象、構造
發表于 11-27 09:33
?168次閱讀
同樣是結構體,看看在C語言和C++中有什么區別?
發表于 10-30 15:11
?356次閱讀
電子發燒友網站提供《C7000優化C/C++編譯器.pdf》資料免費下載
發表于 10-30 09:45
?0次下載
ostream 是 C++ 標準庫中一個非常重要的類,它位于 頭文件中(實際上,更常見的是通過包含 頭文件來間接包含 ,因為 包含了 和 )。 ostream 類及其派生類(如 std::cout
發表于 09-20 15:11
?941次閱讀
1、程序簡介該程序是基于OpenHarmony的C++公共基礎類庫的線程安全隊列:SafeQueue。線程安全隊列,是在dequeue的基礎上封裝std::lock_guard,以此實現線程的相關
發表于 08-30 12:41
?369次閱讀
1、程序簡介該程序是基于OpenHarmony的C++公共基礎類庫的線程安全隊列:SafeQueue。線程安全隊列,是在dequeue的基礎上封裝std::lock_guard,以此實現線程的相關
發表于 08-30 12:41
?385次閱讀
電子發燒友網站提供《C++語言基礎知識.pdf》資料免費下載
發表于 07-19 10:58
?7次下載
C++有多態與繼承,但是很多人開始學習C++,有時候會面臨一個常見問題,就是如何向下轉型,特別是不知道具體類型的時候,這個時候就希望C++
發表于 07-18 10:16
?673次閱讀
#ifndef的方式受C/C++語言標準支持。它不僅可以保證同一個文件不會被包含多次,也能保證內容完全相同的兩個文件(或者代碼片段)不會被不小心同時包含。
發表于 04-19 11:50
?701次閱讀
使用DevEco Studio創建一個Native C++應用。應用采用Native C++模板,實現使用NAPI調用C標準庫的功能。使用C標準庫hypot接口計算兩個給定數平方和的平
發表于 04-14 11:43
?2765次閱讀
在前兩篇博客中,我們?向您介紹了新的 MISRA C++ 標準?和?C++ 的歷史?。在這篇博客中,我們將仔細研究以 C++
發表于 03-28 13:53
?861次閱讀
評論