初識C++類的6個默認成員函數

目錄

一、初始化和清理

二、拷貝復制

三、取地址重載

四、重要說明

五、注意事項

六、示例代碼


????????在C++中,當一個類沒有顯式定義某些成員函數時,編譯器會自動生成6個默認成員函數。這些函數可以分為以下幾類:

一、初始化和清理

1、構造函數:在對象創建時完成初始化工作

  • 如果沒有定義,編譯器生成默認構造函數(無參、函數體為空)

  • 對于內置類型不做初始化,自定義類型會調用其默認構造函數

class Date {
public:// 構造函數Date() {// 初始化代碼}
};

2、析構函數:在對象生命周期結束時完成清理工作

  • 如果沒有顯式定義,編譯器生成默認析構函數(函數體為空)

  • 默認析構函數對內置類型不做處理,對于自定義類型成員,會調用其析構函數

    class Date {
    public:// 析構函數~Date() {// 清理代碼}
    };


二、拷貝復制

1、拷貝構造函數:使用同類對象初始化創建新對象

  • 如果沒有顯式定義,編譯器會生成默認的拷貝構造函數

  • 默認生成的拷貝構造函數進行淺拷貝(逐成員拷貝、按字節拷貝)

  • 對于指針成員需要自定義實現深拷貝

    class Date {
    public:// 拷貝構造函數Date(const Date& d) {// 拷貝邏輯}
    };

2、賦值運算符重載:把一個對象賦值給另一個已存在的對象

  • 如果沒有顯式定義,編譯器會生成默認的賦值運算符,默認生成的進行淺拷貝

  • 需要處理自賦值問題和釋放原有資源

    class Date {
    public:// 賦值運算符重載Date& operator=(const Date& d) {if (this != &d) {// 賦值邏輯}return *this;}
    };

三、取地址重載

1、普通對象取地址運算符重載:普通對象的取地址操作

  • 默認實現返回對象地址

  • 極少需要自定義實現

2、const對象取地址運算符重載:const對象的取地址操作

  • 默認實現返回對象地址

  • 極少需要自定義實現

class Date {
public:// 普通對象取地址Date* operator&() {return this;}// const對象取地址const Date* operator&() const {return this;}
};
  • 這兩個運算符通常不需要顯式實現

  • 編譯器生成的默認版本就能滿足大多數需求


四、重要說明

  1. 前4個成員函數(構造、析構、拷貝構造、賦值重載)最為重要,需要重點掌握

  2. 后2個取地址重載函數在實際開發中很少需要自定義實現

  3. C++11新增了移動構造函數和移動賦值運算符,屬于高級特性

  4. 默認生成的函數行為:

    • 對于內置類型不做處理

    • 對于自定義類型成員會調用其相應成員函數


五、注意事項

  1. C++11之后新增了移動構造函數和移動賦值運算符

  2. 默認生成的函數行為可能不滿足需求(特別是涉及資源管理時),需要顯式實現

  3. 對于包含指針成員或需要資源管理的類,通常需要自定義拷貝構造函數和賦值運算符


六、示例代碼

class Date {
private:int year;int month;int day;public:// 1. 構造函數Date(int y = 1970, int m = 1, int d = 1) : year(y), month(m), day(d) {}// 2. 析構函數~Date() {}// 3. 拷貝構造函數Date(const Date& other) : year(other.year), month(other.month), day(other.day) {}// 4. 賦值運算符重載Date& operator=(const Date& other) {if (this != &other) {year = other.year;month = other.month;day = other.day;}return *this;}// 5. 取地址運算符重載(通常不需要實現)Date* operator&() { return this; }const Date* operator&() const { return this; }
};

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

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

相關文章

Spring事務失效場景?

題目詳細答案Spring事務失效的場景主要有以下幾種。非public方法使用Transactional場景描述:Spring事務管理是基于AOP實現的,而AOP對于JDK動態代理或CGLib動態代理只會代理public方法。如果事務方法的訪問修飾符為非public,SpringAOP無法正確…

1.電動汽車動力電池系統技術介紹與分類

1.電動汽車動力電池系統技術介紹與分類 1.1 電動汽車發展的三個 “黃金時代” 第一個黃金時代(19 世紀末 - 20 世紀初) 技術基礎:鉛酸蓄電池發明(1859 年),推動電動三輪車(1873 年)、…

調用阿里云-阿里云百煉 AI

相關文檔:大模型服務平臺百煉控制臺 多輪對話:通義千問模型的多輪對話_大模型服務平臺百煉(Model Studio)-阿里云幫助中心 創建知識庫:大模型服務平臺百煉控制臺 創建智能體:大模型服務平臺百煉控制臺 點擊智能體發布后&#x…

Apache Flink:從實時數據分析到實時AI

引言歡迎踏上這段深入了解 Apache Flink 演進歷程的旅程,Apache Flink 是一項重新定義了實時數據處理的技術。本博客文章基于王峰(阿里云開放數據平臺負責人、Apache Flink Committer)在 2025 年 Flink Forward Asia 新加坡大會上的演講內容編…

oelove奧壹新版v11.7旗艦版婚戀系統微信原生小程序源碼上架容易遇到的幾個坑,避免遺漏參數白屏顯示等問題

oelove和 金媒我都用過一段時間,其中oelove 用的時間較多,也比較了解這個系統,這個系統比較不錯的就是小程序是原生的(完全遵循微信開發者平臺規則非Uniapp)開發的,原生小程序的特點就是兼容性好&#xff0…

行為模式-模板方法模式

定義:Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithms structure.(定義一個操作中的算法的框架&a…

Java集合遍歷練習題

以下是10道難度遞增的集合遍歷練習題,涵蓋List、Set、Map的各種遍歷方式,包含解題思路、代碼實現和輸出結果: 練習題1:基礎遍歷 - ArrayList的for-each遍歷 題目:創建一個存儲5個字符串的ArrayList(元素為&…

深度學習·ZegclipClip-RC

Zegclip 獲取圖像的特殊編碼:使用prompt tuning的技術,目的是減少過擬合和計算量。調整文本編碼:使用RD關系描述符,將每一個文本對應的[cls] token和圖像對應的[cls] token作哈密頓積,最后文本[cls]token形式化任務 文…

Taro 擴展 API 深度解析與實戰指南

Taro 擴展 API 深度解析與實戰指南 Taro 作為一款優秀的多端開發框架,提供了一系列強大的擴展 API,這些 API 極大地提升了開發效率和應用的可維護性。本文將深入解析 Taro 的擴展 API,并根據其功能特性進行分類講解,幫助開發者更…

容器之王--Docker的部署及基本操作演練

1.2 部署docker 1.2.1 容器工作方法1.2.2 部署第一個容器 官方站點:https://docs.docker.com/ 1.2.2.1 配置軟件倉庫 ]# cd /etc/yum.repos.d ]# vim docker.repo [docker] name docker-ce baseurl https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/sta…

VFTO與局部放電-高壓設備絕緣系統的雙重挑戰與防護策略

目錄 引言VFTO的定義與形成機理VFTO對高壓設備絕緣系統的影響局部放電的危害與機制VFTO與局部放電的關聯性分析檢測與監測技術防護與抑制措施未來技術發展趨勢結論與展望引言 在現代電力系統中,超快速暫態過電壓(Very Fast Transient Overvoltage, VFTO&…

Windows下Rust編碼實現MP4點播服務器

Rust編碼可以實現眾多簡潔、可靠、高效的應用,但語法邏輯要求嚴格,尤其是依賴庫的選擇調用,需要耐心堅持“推敲”。借助DeepSeek并反復編程調試和問答改進,可以最終得到完整有效的Rust編碼。下面分享Windows下Rust編碼實現MP4點播…

ubuntu-相關指令

1、串口1.1確認在系統中檢查設備是否正常加載,在終端輸入以下命令:way1:ll /dev | grep ttyUSB(ll是LL的小寫) way2:ll /dev | grep ttyACM way3:ll /dev | grep ttyCH343USB&#…

docker容器臨時文件去除,服務器容量空間

概述: 接到告警提醒,服務器容量不足,去查看了一下,發現確實100g左右容量已基本用完;分析: 1)查看根目錄下哪些文件夾占用容量較大 使用命令“ du -ah --max-depth1 / ” 查看目標目錄下所有文件…

損耗對信號質量的影響

損耗通常分為介質損耗與導體損耗:介質損耗:介質被施加電場后介質內部帶電粒子在外加電場的作用力下進行微小移動介質損耗與頻率成正比導體損耗:導體由于存在電阻,在有電流流過時產生的熱量造成的損耗為導體損耗。同時,…

【42】【OpenCV C++】 計算圖像某一列像素方差 或 某一行像素的方差;

文章目錄1 要使用到的函數 和 原理1.1 cv::meanStdDev 函數詳解——計算均值和標準差1 .2 方差的通俗解釋2 代碼實現3 問題3.1 入口參數const cv::Mat& img 和 const cv::Mat img區別項目要求:C OPenCV 中 圖像img ,當 string ROIdirection “H”時,…

元圖 CAD 插件化革命:突破效率瓶頸,重構智能協作新范式

在建筑、機械、機電等工程領域,傳統CAD軟件的功能固化與場景割裂已成為效率提升的瓶頸。設計師常面臨“通用工具難適配專業需求”、“跨平臺協作效率低下”、“數據孤島阻礙創新”等痛點。元圖CAD憑借“場景插件化“核心技術,以模塊化能力突破行業桎梏&a…

T:歸并排序

歸并排序.逆序對簡介.歸并排序.習題.逆序對簡介 \;\;\;\;\;\;\;\;簡單介紹一下歸并排序的原理&#xff0c;逆序對的基本概念&#xff0c;然后收集相關的練習。 直接用一個基礎問題來引入。 因此知道了: \;\;\;\;\;\;\;\;逆序對就是一對數滿足 i<j&&nums[i]>nu…

三極管三種基本放大電路:共射、共集、共基放大電路

文章目錄一、共集放大電路1.靜態分析2.動態分析二、共基放大電路1.靜態分析2.動態分析總結如何判斷共射、共集、共基放大電路&#xff1f; 電路的輸入回路與輸出回路以發射極為公共端的電路稱為共射放大電路。 電路的輸入回路與輸出回路以集電極為公共端的電路稱為共集放大電路…

Function AI 助力用戶自主開發 MCP 服務,一鍵上云高效部署

作者&#xff1a;靖蘇 在 AI 與云原生協同創新的浪潮下&#xff0c;多模型、多場景智能應用日益普及。開發者面臨的首要挑戰&#xff0c;是如何實現模型之間、服務之間的高效協同&#xff0c;以及如何便捷地將自主研發能力拓展到云端&#xff0c;形成靈活可擴展的智能服務。MC…