97色伦色在线综合视频,无玛专区,18videosex性欧美黑色,日韩黄色电影免费在线观看,国产精品伦理一区二区三区,在线视频欧美日韩,亚洲欧美在线中文字幕不卡

網(wǎng)站推廣是做什么工作北京網(wǎng)站設(shè)計(jì)推薦刻

鶴壁市浩天電氣有限公司 2026/01/22 08:27:09
網(wǎng)站推廣是做什么工作,北京網(wǎng)站設(shè)計(jì)推薦刻,龐各莊網(wǎng)站建設(shè)公司,上饒小程序開發(fā)公司在 C 面向?qū)ο缶幊讨?xff0c;類的默認(rèn)成員函數(shù)是非常重要的概念。當(dāng)我們沒有顯式實(shí)現(xiàn)某些成員函數(shù)時(shí)#xff0c;編譯器會(huì)自動(dòng)生成它們#xff0c;這些函數(shù)被稱為默認(rèn)成員函數(shù)。本文將詳細(xì)介紹 C 類的 6 個(gè)默認(rèn)成員函數(shù)#xff0c;包括構(gòu)造函數(shù)、析構(gòu)函數(shù)、拷貝構(gòu)造函數(shù)、…在 C 面向?qū)ο缶幊讨蓄惖哪J(rèn)成員函數(shù)是非常重要的概念。當(dāng)我們沒有顯式實(shí)現(xiàn)某些成員函數(shù)時(shí)編譯器會(huì)自動(dòng)生成它們這些函數(shù)被稱為默認(rèn)成員函數(shù)。本文將詳細(xì)介紹 C 類的 6 個(gè)默認(rèn)成員函數(shù)包括構(gòu)造函數(shù)、析構(gòu)函數(shù)、拷貝構(gòu)造函數(shù)、賦值運(yùn)算符重載以及取地址運(yùn)算符重載。一、默認(rèn)成員函數(shù)概述默認(rèn)成員函數(shù)是指用戶沒有顯式實(shí)現(xiàn)編譯器會(huì)自動(dòng)生成的成員函數(shù)。一個(gè)類在我們不寫任何成員函數(shù)的情況下編譯器會(huì)默認(rèn)生成以下 6 個(gè)默認(rèn)成員函數(shù)構(gòu)造函數(shù)析構(gòu)函數(shù)拷貝構(gòu)造函數(shù)賦值運(yùn)算符重載普通取地址運(yùn)算符重載const 取地址運(yùn)算符重載其中前 4 個(gè)是我們需要重點(diǎn)掌握的后兩個(gè)在大多數(shù)情況下使用編譯器自動(dòng)生成的即可。另外C11 以后還增加了兩個(gè)默認(rèn)成員函數(shù)移動(dòng)構(gòu)造和移動(dòng)賦值本文暫不討論。二、構(gòu)造函數(shù)構(gòu)造函數(shù)是一種特殊的成員函數(shù)其作用是在對(duì)象實(shí)例化時(shí)初始化對(duì)象替代了我們以前手動(dòng)調(diào)用的Init函數(shù)并且會(huì)自動(dòng)調(diào)用。構(gòu)造函數(shù)的特點(diǎn)函數(shù)名與類名相同無返回值不需要寫void對(duì)象實(shí)例化時(shí)系統(tǒng)會(huì)自動(dòng)調(diào)用對(duì)應(yīng)的構(gòu)造函數(shù)可以重載若未顯式定義編譯器會(huì)生成無參的默認(rèn)構(gòu)造函數(shù)一旦用戶顯式定義編譯器不再生成無參構(gòu)造函數(shù)、全缺省構(gòu)造函數(shù)、編譯器默認(rèn)生成的構(gòu)造函數(shù)都稱為默認(rèn)構(gòu)造函數(shù)不傳實(shí)參即可調(diào)用且這三者不能同時(shí)存在編譯器默認(rèn)生成的構(gòu)造函數(shù)對(duì)內(nèi)置類型成員變量的初始化不確定對(duì)自定義類型成員變量會(huì)調(diào)用其默認(rèn)構(gòu)造函數(shù)構(gòu)造函數(shù)示例#include iostream using namespace std; class Date { public: // 無參構(gòu)造函數(shù) Date() { _year 1; _month 1; _day 1; } // 帶參構(gòu)造函數(shù) Date(int year, int month, int day) { _year year; _month month; _day day; } // 全缺省構(gòu)造函數(shù)不能與無參構(gòu)造同時(shí)存在 // Date(int year 1, int month 1, int day 1) // { // _year year; // _month month; // _day day; // } void Print() { cout _year / _month / _day endl; } private: int _year; int _month; int _day; }; int main() { Date d1; // 調(diào)用無參構(gòu)造函數(shù) Date d2(2025, 1, 1); // 調(diào)用帶參構(gòu)造函數(shù) // 注意以下寫法是函數(shù)聲明不是對(duì)象實(shí)例化 // Date d3(); return 0; }大多數(shù)情況下我們需要自己實(shí)現(xiàn)構(gòu)造函數(shù)。只有少數(shù)情況如類的成員都是自定義類型且這些自定義類型有合適的默認(rèn)構(gòu)造函數(shù)時(shí)如用兩個(gè) Stack 實(shí)現(xiàn)隊(duì)列編譯器自動(dòng)生成的構(gòu)造函數(shù)才夠用。三、析構(gòu)函數(shù)析構(gòu)函數(shù)的功能并不是銷毀對(duì)象本身對(duì)象在生命周期結(jié)束時(shí)會(huì)自動(dòng)銷毀而是完成對(duì)象中資源的清理釋放工作類比我們之前實(shí)現(xiàn)的Destroy函數(shù)。析構(gòu)函數(shù)的特點(diǎn)析構(gòu)函數(shù)名是在類名前加上~無參數(shù)無返回值不需要寫void一個(gè)類只能有一個(gè)析構(gòu)函數(shù)若未顯式定義系統(tǒng)會(huì)自動(dòng)生成對(duì)象生命周期結(jié)束時(shí)系統(tǒng)會(huì)自動(dòng)調(diào)用析構(gòu)函數(shù)編譯器自動(dòng)生成的析構(gòu)函數(shù)對(duì)內(nèi)置類型成員不做處理對(duì)自定義類型成員會(huì)調(diào)用其析構(gòu)函數(shù)即使顯式定義了析構(gòu)函數(shù)自定義類型成員的析構(gòu)函數(shù)也會(huì)被自動(dòng)調(diào)用沒有申請(qǐng)資源的類如 Date可以不寫析構(gòu)函數(shù)有資源申請(qǐng)的類如 Stack必須自己寫析構(gòu)函數(shù)否則會(huì)造成資源泄漏局部域的多個(gè)對(duì)象后定義的先析構(gòu)析構(gòu)函數(shù)示例#includeiostream using namespace std; typedef int STDataType; class Stack { public: Stack(int n 4) { _a (STDataType*)malloc(sizeof(STDataType) * n); if (nullptr _a) { perror(malloc申請(qǐng)空間失敗); return; } _capacity n; _top 0; } // 析構(gòu)函數(shù)釋放資源 ~Stack() { cout ~Stack() endl; free(_a); _a nullptr; _top _capacity 0; } private: STDataType* _a; size_t _capacity; size_t _top; }; // 兩個(gè)Stack實(shí)現(xiàn)隊(duì)列 class MyQueue { public: // 編譯器默認(rèn)生成的析構(gòu)函數(shù)會(huì)調(diào)用Stack的析構(gòu)函數(shù) ~MyQueue() { cout ~MyQueue() endl; } private: Stack pushst; Stack popst; }; int main() { Stack st; MyQueue mq; // 析構(gòu)順序~MyQueue() - ~Stack()(popst) - ~Stack()(pushst) - ~Stack()(st) return 0; }四、拷貝構(gòu)造函數(shù)拷貝構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù)用于用一個(gè)已存在的對(duì)象初始化一個(gè)新創(chuàng)建的對(duì)象??截悩?gòu)造函數(shù)的特點(diǎn)是構(gòu)造函數(shù)的一個(gè)重載第一個(gè)參數(shù)必須是自身類類型對(duì)象的引用使用傳值方式會(huì)引發(fā)無窮遞歸調(diào)用可以有多個(gè)參數(shù)但后續(xù)參數(shù)必須有缺省值C 規(guī)定自定義類型對(duì)象進(jìn)行拷貝行為必須調(diào)用拷貝構(gòu)造如傳值傳參、傳值返回若未顯式定義編譯器會(huì)生成默認(rèn)拷貝構(gòu)造函數(shù)對(duì)內(nèi)置類型成員進(jìn)行值拷貝 / 淺拷貝對(duì)自定義類型成員調(diào)用其拷貝構(gòu)造成員全是內(nèi)置類型且無資源的類如 Date不需要顯式實(shí)現(xiàn)有資源的類如 Stack需要顯式實(shí)現(xiàn)深拷貝否則會(huì)導(dǎo)致雙重釋放傳值返回會(huì)產(chǎn)生臨時(shí)對(duì)象并調(diào)用拷貝構(gòu)造傳引用返回可減少拷貝但需確保返回對(duì)象在函數(shù)結(jié)束后仍存在拷貝構(gòu)造函數(shù)示例#include iostream using namespace std; class Date { public: Date(int year 1, int month 1, int day 1) { _year year; _month month; _day day; } // 拷貝構(gòu)造函數(shù) Date(const Date d) // 使用const引用避免修改原對(duì)象 { _year d._year; _month d._month; _day d._day; } void Print() { cout _year / _month / _day endl; } private: int _year; int _month; int _day; }; int main() { Date d1(2025,11,30); d1.Print(); // 2025/11/30 // 拷貝構(gòu)造 Date d2(d1); d2.Print(); // 2025/11/30 Date d3 d2; // 也是拷貝構(gòu)造 d3.Print(); // 2025/11/30 return 0; }深拷貝實(shí)現(xiàn)以 Stack 為例// 棧的深拷貝構(gòu)造 Stack(const Stack st) { // 對(duì)指針指向的資源重新申請(qǐng)空間并復(fù)制數(shù)據(jù) _a (STDataType*)malloc(sizeof(STDataType) * st._capacity); if (nullptr _a) { perror(malloc申請(qǐng)空間失敗!!!); return; } memcpy(_a, st._a, sizeof(STDataType) * st._top); _top st._top; _capacity st._capacity; }深 / 淺拷貝區(qū)別淺拷貝按字節(jié)拷貝對(duì)于指針成員只拷貝地址不拷貝資源可能導(dǎo)致多個(gè)對(duì)象共享同一份資源深拷貝不僅拷貝指針本身還對(duì)指針指向的資源重新申請(qǐng)空間并復(fù)制數(shù)據(jù)每個(gè)對(duì)象擁有獨(dú)立的資源五、賦值運(yùn)算符重載賦值運(yùn)算符重載用于完成兩個(gè)已存在對(duì)象之間的拷貝賦值與拷貝構(gòu)造的區(qū)別是拷貝構(gòu)造用于用已有對(duì)象初始化新對(duì)象而賦值重載用于兩個(gè)已存在對(duì)象之間的賦值。運(yùn)算符重載基礎(chǔ)運(yùn)算符重載是具有特殊名字的函數(shù)形式為operator運(yùn)算符重載運(yùn)算符的參數(shù)個(gè)數(shù)與運(yùn)算對(duì)象數(shù)量一致一元運(yùn)算符 1 個(gè)參數(shù)二元運(yùn)算符 2 個(gè)參數(shù)若為成員函數(shù)第一個(gè)參數(shù)為隱式的this指針因此參數(shù)比運(yùn)算對(duì)象少一個(gè)不能重載的運(yùn)算符.*、::、sizeof、?:、.重載操作符至少有一個(gè)類類型參數(shù)前置 和后置 的區(qū)分后置 重載時(shí)增加一個(gè)int形參和建議重載為全局函數(shù)以符合使用習(xí)慣賦值運(yùn)算符重載的特點(diǎn)必須重載為成員函數(shù)參數(shù)建議為const當(dāng)前類類型引用避免傳值拷貝返回值建議為當(dāng)前類類型引用支持連續(xù)賦值未顯式實(shí)現(xiàn)時(shí)編譯器會(huì)生成默認(rèn)賦值重載行為與默認(rèn)拷貝構(gòu)造類似內(nèi)置類型淺拷貝自定義類型調(diào)用其賦值重載有資源的類需要顯式實(shí)現(xiàn)深拷貝的賦值重載賦值運(yùn)算符重載示例// 賦值運(yùn)算符重載 Date operator(const Date d) { // 避免自己給自己賦值 if (this ! d) { _year d._year; _month d._month; _day d._day; } return *this; // 支持連續(xù)賦值 } // 使用示例 int main() { Date d1(2025, 11, 30); Date d2(2025, 12, 1); d1 d2; // 賦值重載兩個(gè)已存在對(duì)象 Date d3(d2); // 拷貝構(gòu)造用d2初始化新對(duì)象d3 Date d4 d2; // 拷貝構(gòu)造不是賦值 return 0; }六、取地址運(yùn)算符重載取地址運(yùn)算符重載分為普通取地址和 const 取地址兩種一般情況下編譯器自動(dòng)生成的即可滿足需求不需要顯式實(shí)現(xiàn)。const成員函數(shù)const 成員函數(shù)是指用 const 修飾的成員函數(shù)const 放在參數(shù)列表后面實(shí)際修飾的是隱含的this指針表明在該函數(shù)中不能修改類的任何成員。// const成員函數(shù)示例 void Print() const // 實(shí)際為void Print(const Date* const this) { cout _year - _month - _day endl; }取地址運(yùn)算符重載示例class Date { public : // 普通取地址運(yùn)算符重載 Date* operator() { return this; // return nullptr; // 可以自定義返回值 } // const取地址運(yùn)算符重載 const Date* operator()const { return this; // return nullptr; // 可以自定義返回值 } private : int _year; // 年 int _month; // 月 int _day; // 日 };
版權(quán)聲明: 本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)聯(lián)系我們進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

重慶seo網(wǎng)絡(luò)優(yōu)化師網(wǎng)站速度優(yōu)化 js加載

重慶seo網(wǎng)絡(luò)優(yōu)化師,網(wǎng)站速度優(yōu)化 js加載,高校網(wǎng)站建設(shè)資料庫,建設(shè)工程項(xiàng)目管理信息門戶網(wǎng)站零基礎(chǔ)也能玩轉(zhuǎn)ARM仿真器#xff1a;從連接到調(diào)試的實(shí)戰(zhàn)全指南 你有沒有過這樣的經(jīng)歷#xff1f;寫好

2026/01/21 17:30:01

張家界網(wǎng)站制作贛州網(wǎng)絡(luò)

張家界網(wǎng)站制作,贛州網(wǎng)絡(luò),自己做個(gè)影視app需要多少錢,國外購物平臺(tái)排行榜前十名PCB缺陷檢測(cè)實(shí)戰(zhàn)手冊(cè)#xff1a;從零搭建工業(yè)級(jí)質(zhì)量控制系統(tǒng) 【免費(fèi)下載鏈接】DeepPCB A PCB defect

2026/01/21 15:16:01

響應(yīng)式企業(yè)網(wǎng)站模板wordpress免郵箱驗(yàn)證

響應(yīng)式企業(yè)網(wǎng)站模板,wordpress免郵箱驗(yàn)證,WordPress文章可視化php代碼,企業(yè)建設(shè)電子商務(wù)網(wǎng)站的目的為什么WordPress視頻播放增強(qiáng)如此重要在當(dāng)今數(shù)字化時(shí)代#xff0c;視頻內(nèi)容已

2026/01/21 17:30:01

免費(fèi)開源電商系統(tǒng)北京seo公司工作

免費(fèi)開源電商系統(tǒng),北京seo公司工作,黃驊市網(wǎng)站建設(shè),網(wǎng)站建設(shè)步驟和流程近期#xff0c;Navicat 宣布正式支持國產(chǎn)達(dá)夢(mèng)數(shù)據(jù)庫。Navicat 旗下全能工具 支持達(dá)夢(mèng)用戶的全方位管理開發(fā)需求#x

2026/01/21 17:18:01

diy網(wǎng)站163企業(yè)郵箱登錄入口官網(wǎng)

diy網(wǎng)站,163企業(yè)郵箱登錄入口官網(wǎng),怎么恢復(fù)網(wǎng)站數(shù)據(jù)庫文件位置,互聯(lián)網(wǎng)信息服務(wù)平臺(tái)Vim高效操作技巧:搜索導(dǎo)航、文本對(duì)象與標(biāo)記使用 在Vim編輯器中,掌握一些高效的操作技巧可以大大提升我們的編輯

2026/01/21 12:30:01