類的構(gòu)造函數(shù)、析構(gòu)函數(shù)、復(fù)制構(gòu)造函數(shù)和賦值操作符

類的構(gòu)造函數(shù)、析構(gòu)函數(shù)、復(fù)制構(gòu)造函數(shù)和賦值操作符

ID:38719000

大小:49.50 KB

頁數(shù):8頁

時間:2019-06-18

類的構(gòu)造函數(shù)、析構(gòu)函數(shù)、復(fù)制構(gòu)造函數(shù)和賦值操作符_第1頁
類的構(gòu)造函數(shù)、析構(gòu)函數(shù)、復(fù)制構(gòu)造函數(shù)和賦值操作符_第2頁
類的構(gòu)造函數(shù)、析構(gòu)函數(shù)、復(fù)制構(gòu)造函數(shù)和賦值操作符_第3頁
類的構(gòu)造函數(shù)、析構(gòu)函數(shù)、復(fù)制構(gòu)造函數(shù)和賦值操作符_第4頁
類的構(gòu)造函數(shù)、析構(gòu)函數(shù)、復(fù)制構(gòu)造函數(shù)和賦值操作符_第5頁
資源描述:

《類的構(gòu)造函數(shù)、析構(gòu)函數(shù)、復(fù)制構(gòu)造函數(shù)和賦值操作符》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、類的構(gòu)造函數(shù)、析構(gòu)函數(shù)、復(fù)制構(gòu)造函數(shù)和賦值操作符作者:lyb661時間:20140318首先,回顧一下有關(guān)函數(shù)的知識。函數(shù)聲明一般由三個部分組成:返回類型、函數(shù)名和由圓括號括起來的參數(shù)表。(1)函數(shù)可以沒有返回類型,這時返回類型由void表示;(2)函數(shù)名標(biāo)志函數(shù)的接口,也是與其他函數(shù)區(qū)別的標(biāo)志;(3)函數(shù)可以沒有參數(shù),也可以有一至多個參數(shù);(4)可以根據(jù)參數(shù)類型、數(shù)量的差別重載函數(shù)。例如:intsum(inta,intb);voidwrite(charc);voiddisplay()const;重載函數(shù)的例子:voidswap(intx,inty);

2、voidswap(doublex,doubley);上面是一些帶有內(nèi)置類型參數(shù)的函數(shù)的例子。類類型同樣有與自己相關(guān)的函數(shù)。其中有幾個特殊的成員函數(shù),對類來說至為重要。1、類的構(gòu)造函數(shù)(consructor):構(gòu)造函數(shù)用于創(chuàng)建類對象時完成必要的初始化工作。所有的類都需要構(gòu)造函數(shù)。它沒有返回類型,函數(shù)與類同名,可以沒有,也可以有多個參數(shù),如果必要。////////////////////////////////////【例1】Data_class1#includeusingstd::cout;usingstd::endl;classDa

3、ta{intvalue;public:Data(intinitial=0):value(initial){}//構(gòu)造函數(shù)constructorintread()const{returnvalue;}voidwrite(inti){value=i;}};intmain(){Dataa(10);8cout<

4、/////////////關(guān)于構(gòu)造函數(shù)有以下幾點(diǎn):(1)對于任何類,編譯器會自動調(diào)用一個默認(rèn)的構(gòu)造函數(shù);(2)如果定義了自己的構(gòu)造函數(shù),則默認(rèn)的構(gòu)造函數(shù)將不再工作;(3)同一般的函數(shù)一樣,構(gòu)造函數(shù)也可以被重載。(4)可以定義默構(gòu)造函數(shù),如編譯器合成的那樣工作。Data(intinitial=0):value(initial){}就是一個重載的有默認(rèn)值的構(gòu)造函數(shù)。當(dāng)創(chuàng)建對象a(10)時只有調(diào)用它才能正常工作。注意到該構(gòu)造函數(shù)的參數(shù)有個默認(rèn)值"0"。如果沒胡這個0,則對象b就不能被建立。它代替默認(rèn)構(gòu)造函數(shù)的部分工作。對于這個簡單的Data類,它的默認(rèn)構(gòu)造函

5、數(shù)應(yīng)該是這樣:Data(){}。這個由編譯器合成的構(gòu)造函數(shù)用于創(chuàng)建一個對象而不顯式地初始化。如果用這個默認(rèn)構(gòu)造函數(shù)替換我們自己定義的構(gòu)造函數(shù),則a對象的建立是無效的,而對象b的成員初始值是無定義的,有興趣的話可以自己試一試。當(dāng)然,也可以用成員函數(shù)read()來完成一些初始化工作??傊襁@樣一個簡單的類,默認(rèn)構(gòu)造函數(shù)的工作也不是盡如人意的。對于復(fù)雜一點(diǎn)的類呢?////////////////////////////////////【例2】Data_class2(警告:本程序有內(nèi)存泄漏風(fēng)險(xiǎn)不要上機(jī)運(yùn)行)#includeusingstd

6、::cout;usingstd::endl;classData{int*ip;public:Data(int&i):ip(newint(i)){}8~Data(){deleteip;}//destructorintread()const{return*ip;}voidwrite(intn){*ip=n;}};intmain(){intobj=10;Dataa(obj);cout<

7、//本例是上一例的改進(jìn),由于類具有指針成員,并且申請自由存儲,所以重新定義了析構(gòu)函數(shù)的行為,用于刪除指針。2、類的析構(gòu)函數(shù)(destructor):析構(gòu)函數(shù)與類同名,在名字前加符號~以與構(gòu)造函數(shù)相區(qū)別。析構(gòu)函數(shù)用于在類對象超出作用域時按類中聲明次序的逆序撤銷各個成員。與構(gòu)造函數(shù)有所不同:盡管類定義了自己的析構(gòu)函數(shù),編譯器合成的析構(gòu)函數(shù)也會正常工作。由于函數(shù)重載規(guī)則的限制,析構(gòu)函數(shù)是不能被重載的。為什么?我們所謂自定義的意思,不過在它常規(guī)工作量外給它加了點(diǎn)的擔(dān)子。對于上面的Data類來說,它的默認(rèn)的析構(gòu)函數(shù)~Data(){}的工作并不能令人滿意。該類有一

8、個int類型的指針成員,在程序運(yùn)行過程中由該指針申請了自由存儲,所以必須定義一個析構(gòu)函數(shù),在程

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。