C++編程析構(gòu)函數(shù)拷貝構(gòu)造函數(shù)使用示例詳解
首先定義一個(gè)類進(jìn)行操作。
class MM { public: protected: int year; string name; }
構(gòu)造函數(shù)在類中默認(rèn)有一個(gè)無參的構(gòu)造函數(shù)
默認(rèn)的構(gòu)造函數(shù)為 類名(){};這個(gè)構(gòu)造函數(shù)
如果直接寫了構(gòu)造函數(shù)那么這個(gè)構(gòu)造函數(shù)將會(huì)沒有
構(gòu)造函數(shù)
class MM { public: //MM() {};//無參構(gòu)造函數(shù) MM(int year, string name) :year(year), name(name) {}; //有參構(gòu)造函數(shù) 在定義對(duì)象的時(shí)候必須傳參數(shù),沒參數(shù)會(huì)報(bào)錯(cuò) MM(int year, string name) { this->name = name; this->year = year; }//這兩個(gè)是一樣的 MM(int year, string name = "") :year(year) {}; //因?yàn)閟tring 是缺省的 如果寫沒有構(gòu)造默認(rèn)為空 就是 MM mm(15);這里mm對(duì)象year=15 name=“”; //缺省只能左邊到右邊 protected: int year; string name; };
析構(gòu)函數(shù)
MM(){};就是對(duì)構(gòu)建的對(duì)象進(jìn)行銷毀
析構(gòu)函數(shù)的使用是一個(gè)自動(dòng)調(diào)用的過程不需要人為進(jìn)行,當(dāng)對(duì)象的生命周期結(jié)束自動(dòng)釋放
//析構(gòu)函數(shù)需要注意的點(diǎn)
1.當(dāng)對(duì)象存在指針的時(shí)候使用析構(gòu)函數(shù)時(shí),析構(gòu)函數(shù)里面需要釋放指針的指向
class MM { public: MM(const char* str) { strcpy(this->str, str); } ~MM() { delete[] str; }; //這里需要釋放str內(nèi)存不然析構(gòu)函數(shù)只會(huì)釋放類不會(huì)釋放str protected: int year; string name; char* str; }; int main() { MM mm("kkk"); return 0; }
如果類中沒有指針就不用在析構(gòu)函數(shù)中去釋放指針指向
拷貝構(gòu)造(對(duì)對(duì)象進(jìn)行賦值)//直接調(diào)用拷貝構(gòu)造不調(diào)用構(gòu)造函數(shù)
MM mm(15,"kkk"); //拷貝構(gòu)造的二種方式對(duì)對(duì)象進(jìn)行賦值 MM mm1(mm); MM mm2 = mm; mm1.printfMM(); mm2.printfMM();
如果是通過匿名創(chuàng)建時(shí)匿名對(duì)象調(diào)用構(gòu)造函數(shù)
MM mm3 = MM(16, "jfsdl"); mm3.printfMM();
然后匿名對(duì)象賦值給對(duì)象調(diào)用的是拷貝構(gòu)造函數(shù)
拷貝構(gòu)造之深拷貝和淺拷貝
//淺拷貝 默認(rèn)也是淺拷貝就是賦值拷貝 MM(const MM&object) { this->str = object.str; } //深拷貝 //深拷貝就是通過指針申請(qǐng)指向然后進(jìn)行賦值 MM(const MM& object) { int len = strlen(object.str) + 1; this->str = new char[len]; strcpy(str, object.str); }
深淺拷貝區(qū)別
淺拷貝就是進(jìn)行了賦值操作
深拷貝是通過申請(qǐng)指針后再進(jìn)行賦值(深拷貝析構(gòu)函數(shù)要釋放申請(qǐng)的指針)
謝謝大家的閱讀,如有不足請(qǐng)及時(shí)指出,萬分感激
以上就是C++編程析構(gòu)函數(shù)拷貝構(gòu)造函數(shù)使用示例詳解的詳細(xì)內(nèi)容,更多關(guān)于C++編程析構(gòu)函數(shù)拷貝構(gòu)造函數(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C語言實(shí)踐設(shè)計(jì)開發(fā)飛機(jī)游戲
飛機(jī)大戰(zhàn)想必是很多人童年時(shí)期的經(jīng)典游戲,我們依舊能記得抱個(gè)老人機(jī)娛樂的場(chǎng)景,下面這篇文章主要給大家介紹了關(guān)于如何利用C語言寫一個(gè)簡(jiǎn)單的飛機(jī)大戰(zhàn)小游戲的相關(guān)資料,需要的朋友可以參考下2022-02-02C++實(shí)現(xiàn)動(dòng)態(tài)分配const對(duì)象實(shí)例
這篇文章主要介紹了C++實(shí)現(xiàn)動(dòng)態(tài)分配const對(duì)象實(shí)例,包括了const對(duì)象的創(chuàng)建、刪除及應(yīng)用實(shí)例,需要的朋友可以參考下2014-10-10VC List Control控件如何刪除選中的記錄實(shí)例詳解
這篇文章主要介紹了VC List Control控件如何刪除選中的記錄實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-06-06vscode實(shí)現(xiàn)本地代碼自動(dòng)同步到遠(yuǎn)程機(jī)器的步驟
這篇文章主要介紹了vscode實(shí)現(xiàn)本地代碼自動(dòng)同步到遠(yuǎn)程機(jī)器的步驟,本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06C++用函數(shù)對(duì)算法性能進(jìn)行測(cè)試
算法無處不在,算法是程序的靈魂,而數(shù)據(jù)結(jié)構(gòu)則是程序的骨架,二者共同構(gòu)成了程序,那么如何評(píng)估算法的性能呢?理論上可以通過計(jì)算時(shí)間復(fù)雜度的方法來評(píng)估,但這是理性的認(rèn)識(shí),我們還有一種直觀的評(píng)估方法,那就是程序執(zhí)行的時(shí)間2022-08-08