C++構造函數和析構函數

C++構造函數和析構函數

??C++的構造函數和析構函數是類的特殊成員函數,用于對象的創建和銷毀,分別在對象的生命周期開始和結束時自動調用。它們的使用對資源管理和對象的初始化/清理至關重要。


1. 構造函數

定義
  • 構造函數在對象創建時自動調用,用于初始化對象的數據成員。
  • 構造函數的名字與類名相同,沒有返回值。
特點
  1. 無返回值(即使寫void也會報錯)。
  2. 可以重載:支持多個構造函數,通過參數列表區分。
  3. 默認構造函數:如果沒有定義構造函數,編譯器會生成一個默認構造函數。
  4. 隱式調用與顯式調用:構造函數可以通過隱式或顯式方式調用。
語法
class MyClass {
public:MyClass() { // 默認構造函數std::cout << "Default Constructor called!" << std::endl;}MyClass(int x) { // 參數化構造函數std::cout << "Parameterized Constructor called with value " << x << std::endl;}
};int main() {MyClass obj1;        // 調用默認構造函數MyClass obj2(10);    // 調用參數化構造函數MyClass obj3 = MyClass(20); // 顯式調用構造函數return 0;
}
類型
  1. 默認構造函數
    • 無參數或所有參數都有默認值。
    MyClass() {}
    
  2. 參數化構造函數
    • 帶參數,用于靈活初始化對象。
    MyClass(int x, int y) {}
    
  3. 拷貝構造函數
    • 通過同類型對象初始化新對象,參數是同類的引用。
    MyClass(const MyClass& obj) {}
    
  4. 移動構造函數
    • 用右值引用初始化對象,提升性能。
    MyClass(MyClass&& obj) noexcept {}
    
  5. 委托構造函數(C++11)
    • 一個構造函數調用另一個構造函數。
    MyClass() : MyClass(0) {}
    
初始化列表

??構造函數使用初始化列表可以高效地初始化數據成員,特別是常量、引用類型或需要自定義構造的成員。

  • 成員變量的初始化順序與它們在類中聲明的順序一致,而不是在初始化列表中出現的順序。即使在初始化列表中以不同順序指定初始化,成員變量的初始化仍按照它們在類中的聲明順序進行。
  • const 成員變量必須在對象構造時初始化,因為它們一旦初始化后就不能被修改。由于這種特性,const 成員變量的初始化只能通過構造函數的初始化列表實現,不能在構造函數體內賦值。
class 

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

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

相關文章

根據Cortex-M3(STM32F1)權威指南講解MCU內存架構與如何查看編譯器生成的地址具體位置

首先我們先查看官方對于Cortex-M3預定義的存儲器映射 1.存儲器映射 1.1 Cortex-M3架構的存儲器結構 內部私有外設總線&#xff1a;即AHB總線&#xff0c;包括NVIC中斷&#xff0c;ITM硬件調試&#xff0c;FPB, DWT。 外部私有外設總線&#xff1a;即APB總線&#xff0c;用于…

軟件設計師“測試用例”考點分析——求三連

一、測試用例設計核心要點解析 1. 白盒測試覆蓋標準 &#xff08;1&#xff09;路徑覆蓋&#xff1a;需覆蓋程序中所有可能的路徑。如2018年真題路徑覆蓋需要3組測試用例&#xff08;①②、①③、①③④&#xff09;&#xff0c;2020年流程圖則需4個用例覆蓋ace/abd/abe/acd四…

Linux 用戶無法遠程連接服務器

前言 昨天深夜一點多接到客戶電話&#xff0c;客戶說OS用戶下午下班前還能正常登錄。因為晚上一點半需要關閉所有服務進行遷移&#xff0c;但是用戶無法登錄了&#xff0c;導致后續流程無法執行。我讓他先通過root用戶緊急修改了密碼&#xff0c;先保證業務正常流轉。 問題 …

多模態大語言模型arxiv論文略讀(八十八)

MammothModa: Multi-Modal Large Language Model ?? 論文標題&#xff1a;MammothModa: Multi-Modal Large Language Model ?? 論文作者&#xff1a;Qi She, Junwen Pan, Xin Wan, Rui Zhang, Dawei Lu, Kai Huang ?? 研究機構: ByteDance, Beijing, China ?? 問題背景…

svn遷移到git保留記錄和Python字符串格式化 f-string的進化歷程

svn遷移到git保留記錄 and Python字符串格式化(二&#xff09;&#xff1a; f-string的進化歷程 在將項目從SVN遷移到Git時&#xff0c;保留完整的版本歷史記錄非常重要。下面是詳細的步驟和工具&#xff0c;可以幫助你完成這一過程&#xff1a; 安裝Git和SVN工具 首先&#…

springboot配置mysql druid連接池,以及連接池參數解釋

文章目錄 前置配置方式參數解釋 前置 springboot 項目javamysqldruid 連接池 配置方式 在 springboot 的 application.yml 中配置基本方式 # Druid 配置&#xff08;Spring Boot YAML 格式&#xff09; spring:datasource:url: jdbc:mysql://localhost:3306/testdb?useSSL…

vue實現高亮文字效果——advanced-mark.js

組件介紹-advanced-mark.js&#xff1a; advanced-mark.js 是一個用于 Vue 的高亮文字組件&#xff0c;它可以幫助你在文本中高亮顯示指定的關鍵詞或短語。 組件地址&#xff1a;https://angezid.github.io/advanced-mark.js/doc-v2/getting-started.html 主要功能&#xff1…

DC30V/2.5A同步降壓芯片SL1581 輸入24V降壓5V 12V2A電流

在工業自動化、汽車電子等領域&#xff0c;24V 電源系統向 5V/12V 雙軌供電的需求日益增長。針對這一痛點&#xff0c;森利威爾電子重磅推出 DC30V/2.5A 同步降壓芯片 SL1581&#xff0c;憑借卓越的性能和創新設計&#xff0c;為工程師提供高可靠性、高性價比的電源解決方案。 …

React 第四十四節Router中 usefetcher的使用詳解及注意事項

前言 useFetcher 是 React Router 中一個強大的鉤子&#xff0c;用于在不觸發頁面導航的情況下執行數據加載&#xff08;GET&#xff09;或提交&#xff08;POST&#xff09;。 一、useFetcher 應用場景&#xff1a; 1、后臺數據預加載&#xff08;如鼠標懸停時加載數據&…

Jmeter(三) - 測試計劃(Test Plan)的元件

1.簡介 上一篇已經教你如何通過JMeter來創建一個測試計劃&#xff08;Test Plan&#xff09;&#xff0c;那么這一篇我們就將JMeter啟動起來&#xff0c;創建一個測試計劃&#xff08;Test plan&#xff09;&#xff0c;給大家介紹一下測試計劃&#xff08;Test Plan&#xff…

應屆本科生簡歷制作指南

一、找一個專業的簡歷模板 首先&#xff0c;你需要訪問 Overleaf 的官方網站&#xff0c;也就是Overleaf, Online LaTeX Editor&#xff0c;進入頁面后&#xff0c;點擊注冊按鈕&#xff0c;按照提示填寫相關信息來創建一個屬于自己的賬號&#xff0c;通常需要填寫用戶名、郵箱…

[Spring Boot]整合Java Mail實現Outlook發送郵件

日常開發過程中,我們經常需要使用到郵件發送任務,比方說驗證碼的發送、日常信息的通知等。日常比較常用的郵件發送方包括:163、QQ等,本文主要講解Outlook SMTP的開啟方式、OutLook STARTTTL的配置、如何通過JavaMail來實現電子郵件的發送等。 Outlook作為微軟提供的企業電子…

【YOLOs-CPP-圖像分類部署】03-解決報錯

完整項目鏈接 點擊here下載! 上一篇問題 經過上一篇博客,我們得到了一個粗略版(會報錯)的項目。如何解決異常報錯呢? 我把問題在github上對作者進行了提問,但是2天后,依然沒有回復。 怎么辦呢?只能自己調試代碼了。 修改代碼 經過大量調試,修改了YOLO11CLASS.h…

Dockers Compose常用指令介紹

Dockers Compose常用指令 1、常用指令介紹 1.1、version 指令 頂級一級指令&#xff0c;指定 compose 指定文件格式版本 version: "3.8" services: 不同版本支持的功能不同。常用版本有 ‘2’, ‘3’, ‘3.8’ 等。 1.2、services 指令 頂級一級指令&#xff0…

謝飛機的Spring WebFlux面試之旅:從基礎到深入

謝飛機的Spring WebFlux面試之旅&#xff1a;從基礎到深入 面試場景&#xff1a;謝飛機的WebFlux面試 面試官&#xff1a;你好&#xff0c;謝飛機&#xff0c;請介紹一下你自己。 謝飛機&#xff1a;您好&#xff0c;我是一名有三年開發經驗的Java程序員&#xff0c;熟悉Spr…

Mysql增量備份與恢復

1.練習數據增量備份 增量備份&#xff1a;備份上次備份后&#xff0c;新產生的數據。 PERCONA Xtrabackup是一款強大的在線熱備份工具&#xff0c;備份過程中不鎖庫表&#xff0c;適合生產環境。支持完全備份與恢復、增量備份與恢復、差異備份與恢復。 安裝Xtrabackup 150、…

GStreamer (三)常?插件

常?插件 1、Source1.1、filesrc1.2. videotestsrc1.3. v4l2src1.4. rtspsrc和rtspclientsink 2、 Sink2.1. filesink2.2. fakesink2.3. xvimagesink2.4. kmssink2.5. waylandsink2.6. rkximagesink2.7. fpsdisplaysink 3 、視頻推流/拉流3.1. 本地推流/拉流3.1.1 USB攝像頭3.1…

Spring Boot與Kafka集成實踐:實現高效消息隊列

Spring Boot與Kafka集成實踐 引言 在現代分布式系統中&#xff0c;消息隊列是實現異步通信和解耦的重要組件。Apache Kafka作為一種高性能、分布式的消息隊列系統&#xff0c;被廣泛應用于大數據和實時數據處理場景。本文將介紹如何在Spring Boot項目中集成Kafka&#xff0c;…

Linux PXE批量裝機+無人值守技術(自動化裝機)

目錄 PXE所需條件 服務端所需服務 客戶端所需功能 1.準備系統安裝rpm倉庫 (1)安裝vsftpd服務 (2)啟動并設置開機自啟 (3)準備yum倉庫文件 2.安裝配置dhcpd服務 (1)安裝dhcoo軟件包 (2)配置dhcp服務 (3)啟動并設置開機自啟 3.部署TFTP服務 (1)安裝軟…

linux_cmake的筆記

include_directories()的使用 今天在運行一個cmakelist.txt如下所示時候&#xff0c;發現一個問題&#xff1a; cmake_minimum_required(VERSION 3.28) project(l_trajectoryError CXX) option(USE_UBUNTU_20 "Set to ON if you are using Ubuntu 20.04" OFF) find…