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ù)據(jù)結(jié)構(gòu)中棧的實(shí)現(xiàn)代碼
這篇文章主要介紹了C語言 數(shù)據(jù)結(jié)構(gòu)中棧的實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2016-10-10
FFmpeg實(shí)現(xiàn)將編碼后數(shù)據(jù)保存成mp4
這篇文章主要為大家詳細(xì)介紹了FFmpeg如何實(shí)現(xiàn)將編碼后數(shù)據(jù)保存成mp4,即從內(nèi)存塊中獲取原始數(shù)據(jù),然后依次進(jìn)行解碼、編碼、最后保存成mp4視頻文件,感興趣的可以了解一下2023-08-08
Qt實(shí)現(xiàn)繪制多個(gè)設(shè)備的流量曲線圖詳解
這篇文章主要為大家詳細(xì)介紹了如何使用Qt開發(fā)繪制多個(gè)設(shè)備的流量曲線圖,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Qt有一定的幫助,需要的可以參考一下2023-01-01
C語言如何求整數(shù)的位數(shù)及各位數(shù)字之和
這篇文章主要介紹了C語言如何求整數(shù)的位數(shù)及各位數(shù)字之和,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
C語言關(guān)鍵字auto與register的深入理解
本篇文章是對(duì)c語言關(guān)鍵字auto與register的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05

