C++進階之路:何為默認構造函數與析構函數(類與對象_中篇)


?? 歡迎大家來訪Srlua的博文(づ ̄3 ̄)づ╭
?~??

🌟🌟 歡迎各位親愛的讀者,感謝你們抽出寶貴的時間來閱讀我的文章。

我是Srlua小謝,在這里我會分享我的知識和經驗。🎥

希望在這里,我們能一起探索IT世界的奧妙,提升我們的技能。🔮

記得先點贊👍后閱讀哦~ 👏👏

📘📚 所屬專欄:C/C++

歡迎訪問我的主頁:Srlua小謝 獲取更多信息和資源。??🌙🌙

???

???

目錄

類的6個默認成員函數

默認構造函數(Default Constructor):

特性 :

1. 函數名與類名相同。

2. 無返回值。

3. 對象實例化時編譯器自動調用對應的構造函數。

4. 構造函數可以重載

?5. 如果類中沒有顯式定義構造函數,則C++編譯器會自動生成一個無參的默認構造函數,一旦用戶顯式定義編譯器將不再生成。

?6.關于編譯器生成的默認成員函數,為什么在不實現構造函數的情況下,編譯器會生成默認的構造函數。但是看起來默認構造函數又沒什么用?d對象調用了編譯器生成的默認構造函數,但是d對象_year/_month/_day,依舊是隨機值。也就說在這里編譯器生成的默認構造函數并沒有什么用??

7.無參的構造函數和全缺省的構造函數都稱為默認構造函數,并且默認構造函數只能有一個。

析構函數(Destructor):

特性:

1. 析構函數名是在類名前加上字符 ~。

2. 無參數無返回值類型。

3. 一個類只能有一個析構函數。若未顯式定義,系統會自動生成默認的析構函數。

4. 對象生命周期結束時,C++編譯系統系統自動調用析構函數。

?5. 關于編譯器自動生成的析構函數,是否會完成一些事情呢?下面的程序我們會看到,編譯器生成的默認析構函數,對自定類型成員調用它的析構函數

?6. 如果類中沒有申請資源時,析構函數可以不寫,直接使用編譯器生成的默認析構函數,比如Date類;有資源申請時,一定要寫,否則會造成資源泄漏,比如Stack類。


類的6個默認成員函數

如果一個類中什么成員都沒有,簡稱為空類。

空類中真的什么都沒有嗎?并不是,任何類在什么都不寫時,編譯器會自動生成以下6個默認成員函數。

默認成員函數:用戶沒有顯式實現,編譯器會生成的成員函數稱為默認成員函數。

class A {};

默認構造函數(Default Constructor):

如果在類中沒有顯式地定義構造函數,編譯器會自動生成?一個默認構造函數。默認構造函數不接受任何參數,用于創建對象時進行初始化操作。?

class MyClass {
public:// 默認構造函數MyClass() {// 構造函數體}
};

對于以下Date類代碼示例:

對于Date類,可以通過 Init 公有方法給對象設置日期,但如果每次創建對象時都調用該方法設置信息,未免有點麻煩,那能否在對象創建時,就將信息設置進去呢?

構造函數是一個特殊的成員函數,名字與類名相同,創建類類型對象時由編譯器自動調用,以保證每個數據成員都有 一個合適的初始值,并且在對象整個生命周期內只調用一次

特性

構造函數是特殊的成員函數,需要注意的是,構造函數雖然名稱叫構造,但是構造函數的主要任務并不是開空間創建對象,而是初始化對象

特征如下:

1. 函數名與類名相同。
2. 無返回值。
3. 對象實例化時編譯器自動調用對應的構造函數。
4. 構造函數可以重載
5. 如果類中沒有顯式定義構造函數,則C++編譯器會自動生成一個無參的默認構造函數,一旦用戶顯式定義編譯器將不再生成。

不顯示定義,編譯器自動生成,顯示定義

6.關于編譯器生成的默認成員函數,為什么在不實現構造函數的情況下,編譯器會生成默認的構造函數。但是看起來默認構造函數又沒什么用?d對象調用了編譯器生成的默認構造函數,但是d對象_year/_month/_day,依舊是隨機值。也就說在這里編譯器生成的默認構造函數并沒有什么用??

解答:C++把類型分成內置類型(基本類型)和自定義類型。

內置類型就是語言提供的數據類型,如:int/char...,自定義類型就是我們使用的class/struct/union等自己定義的類型,對于下面的程序,就會發現編譯器生成默認的構造函數會對自定類型成員_t調用的它的默認成員函數

7.無參的構造函數和全缺省的構造函數都稱為默認構造函數,并且默認構造函數只能有一個。

注意:無參構造函數、全缺省構造函數、我們沒寫編譯器默認生成的構造函數,都可以認為是默認構造函數。

對重載函數的調研不明確,有歧義!

析構函數(Destructor):

與構造函數對應,析構函數用于在對象銷毀時進行清理工作,釋放對象占用的資源。如果沒有顯式定義析構函數,編譯器也會生成一個默認的析構函數。對象在銷毀時會自動調用析構函數,完成對象中資源的清理工作

class MyClass {
public:// 析構函數~MyClass() {// 析構函數體}
};

特性:

析構函數是特殊的成員函數,其特征如下:

1. 析構函數名是在類名前加上字符 ~。
2. 無參數無返回值類型。
3. 一個類只能有一個析構函數。若未顯式定義,系統會自動生成默認的析構函數。

注意:析構函數不能重載

4. 對象生命周期結束時,C++編譯系統系統自動調用析構函數。
5. 關于編譯器自動生成的析構函數,是否會完成一些事情呢?下面的程序我們會看到,編譯器生成的默認析構函數,對自定類型成員調用它的析構函數

6. 如果類中沒有申請資源時,析構函數可以不寫,直接使用編譯器生成的默認析構函數,比如Date類;有資源申請時,一定要寫,否則會造成資源泄漏,比如Stack類。

???

希望對你有幫助!加油!

若您認為本文內容有益,請不吝賜予贊同并訂閱,以便持續接收有價值的信息。衷心感謝您的關注和支持!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/13294.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13294.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/13294.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Web3與物聯網:構建智能連接的數字世界

引言 隨著互聯網的不斷發展,物聯網(Internet of Things, IoT)作為一種新興的信息技術,正在逐漸滲透到我們的生活和工作中。而隨著Web3的興起,物聯網將迎來新的發展機遇。本文將探討Web3與物聯網的結合,如何…

如何在職場中構建穩固地位:持續學習、拓展人脈與職業規劃

在日益激烈的職場競爭中,保持一種穩健且前瞻性的狀態是至關重要的,它可以幫助我們在各種“裁員潮”中保持相對安全的位置。以下是一些建議,幫助我們判斷和維持在職場中的安全位置: 首先,持續學習和提升技能是關鍵。職場…

2024年NOC大賽創客智慧(西瓜創客)圖形化復賽編程真題模擬試卷包含答案

NOC 復賽圖形化模擬題 【題目要求】 1、添加角色小貓和“Balloon1”角色氣球(大小 70) 2、添加背景“Boardwalk” 3、點擊綠旗,角色初始位置如圖,小貓從舞臺左側出發,向舞臺右 側移動,移動過程中不斷切換造型 4、當小貓碰到氣球角色,小貓停止移動,氣球逐漸向舞臺上方…

FFmpeg開發筆記(二十七)解決APP無法訪問ZLMediaKit的直播鏈接問題

上一篇文章介紹了如何通過ZLMediaKit實現視頻推拉流,并使用VLC播放器驗證視頻直播地址。即使不用VLC播放器,直接在Qt工程的C代碼中調用FFmpeg的API,也能訪問ZLMediaKit的直播地址,并正常渲染視頻畫面。關于如何在Qt工程中引入FFmp…

Oracle中全量CHECKPOINT和增量CHECKPOINT的區別與作用

全量CHECKPOINT和增量CHECKPOINT對用戶都是透明的,而增量CHECKPOINT只不過是將全量CHECKPOINT要寫的臟塊分時間分批次寫到數據文件中而已,此操作可以極大地減少對數據庫性能的影響。 全量CHECKPOINT 全量CHECKPOINT是指DBWR進程將臟緩沖區列表中的臟塊一…

Spring Boot集成Security快速入門Demo

1.什么是Security? Spring Security是一個Java框架,用于保護應用程序的安全性。它提供了一套全面的安全解決方案,包括身份驗證、授權、防止攻擊等功能。Spring Security基于過濾器鏈的概念,可以輕松地集成到任何基于Spring的應用…

ifconfig 無輸出

https://www.cnblogs.com/YYFaGe/p/14482813.html YYFaGe 博客園首頁聯系管理隨筆 - 56 文章 - 0 評論 - 2 閱讀 - 94650 ifconfig 無輸出 在終端執行ifconfig發現無任何輸出,也無報錯(基于hi3559av100開發板)。 1、參考這個連接解決&…

月薪3萬,沉迷“薅羊毛”

在網購江湖中,蟹老板是一位擁有十年經驗的資深“羊毛黨”。 他不僅是位精明的數學家,更是一位高效的“生產線”工人,專注于各大網購平臺的優惠機制。每逢618大促,他總能憑借超凡的洞察力和手速,輕松斬獲豐厚的“羊毛”…

peft+llama3訓練自定義數據

要微調自己的模型訓練 LLaMA 3,則需要準備一個 JSON 格式的數據集,其中每個條目包含輸入文本和相應的標簽(如果有的話)。以下是一個 JSON 數據集的示例格式: [{"input": "這是一個輸入樣本。",&q…

17.高并發場景下CAS效率的優化

文章目錄 高并發場景下CAS效率的優化1.空間換時間(LongAdder)2.對比LongAdder和AtomicLong執行效率2.1.AtmoictLong2.2.LongAdder2.3.比對 3.LongAdder原理3.1.基類Striped64內部的三個重要成員3.2.LongAdder.add()方法3.3.LongAdder中longAccumulate()方…

pytorch-13_1 深度學習之數據準備

1、手動實現訓練集和測試集的切分 1. data_split()函數 接下來我們開始實踐模型評估過程,首先是對訓練集和測試集的劃分,我們嘗試創建一個切分訓練集和測試集的函數。 def data_split(features, labels, rate=0.7):"""訓練集和測試集切分函數:param feature…

搜索二維矩陣 - LeetCode 熱題 64

大家好!我是曾續緣🧡 今天是《LeetCode 熱題 100》系列 發車第 64 天 二分查找第 2 題 ??點贊 👍 收藏 ?再看,養成習慣 搜索二維矩陣 給你一個滿足下述兩條屬性的 m x n 整數矩陣: 每行中的整數從左到右按非嚴格遞增…

六西格瑪綠帶培訓:解鎖質量工程師的職場新篇章

在質量管理這條道路上,我們或許都曾有過這樣的疑問:為何付出了同樣的努力,卻未能獲得預期的回報?當我們看到身邊的同行們逐漸步入高薪的行列,而自己卻似乎陷入了職業的泥沼,這種對比無疑令人倍感焦慮。然而…

了解等保測評的中間件安全Tomcat,如何檢查配置是否符合安全要求?

在等保測評中,Tomcat中間件的安全性是一個重要的評估內容。Tomcat是一個開源的應用服務器,廣泛應用于Web應用程序的開發和部署。由于其易用性和靈活性,Tomcat成為了一個受歡迎的目標,被黑客攻擊和濫用。因此,保證Tomca…

算法提高之信使

算法提高之信使 核心思想&#xff1a;單源最短路 因為數據范圍很小 可以考慮floyd算法(三重循環) #include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N 110,INF 0x3f3f3f3f;int d[N][N];int n,m;int main(){cin…

【STM32-MX_GPIO_Init分析】

MX_GPIO_Init分析源碼如下&#xff1a; __HAL_RCC_GPIOE_CLK_ENABLE源碼如下&#xff1a; #define RCC ((RCC_TypeDef *) RCC_BASE) #define RCC_BASE (AHB1PERIPH_BASE 0x3800UL) #define AHB1PERIPH_BASE (PERIPH_BASE 0x00020000U…

Android Studio kotlin 轉 Java

一. 隨筆記錄 java代碼可以轉化成kotlin代碼&#xff0c;當然 Kotlin 反過來也可以轉java 在Android Studio中 可以很方便的操作 AS 環境&#xff1a;Android Studio Iguana | 2023.2.1 二. 操作步驟 1.步驟 頂部Tools ----->Kotlin ------>Show Kotlin Bytecode 步…

springcloud+nocos從零開始

首先是去nacos官網下載最新的包&#xff1a;Nacos 快速開始 | Nacos win下啟動命令&#xff1a;startup.cmd -m standalone 這樣就可以訪問你的nacos 了。 添加一個配置&#xff0c;記住你的 DataId,和Group名字。 創建一個pom項目&#xff0c;引入springCloud <?xml ve…

python中內存和磁盤交互樣例

目錄 一、內存交互 1.1 變量與數據結構 1.2 對象的創建和方法調用 1.3 操作內存中的數據 二、磁盤交互 2.1 文件讀寫 2.2 操作系統相關的文件操作 2.3 讀寫 JSON 文件 2.4 讀寫 CSV 文件 一、內存交互 內存交互&#xff1a;主要涉及變量、數據結構、對象的創建與操作…

05.13_111期_C++_紅黑樹

紅黑樹的性質 保證樹中最長路徑的長度不超過最短路徑的長度的兩倍 用什么方法保證上面這一點&#xff1f;將樹中的結點視為是有顏色的 采用如下的規則&#xff1a; rule1: 樹中的結點不是紅色就是黑色 rule2: 樹的根節點是黑色的 rule3: 如果一個結點是紅色…