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

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

ID:38719000

大?。?9.50 KB

頁數(shù):8頁

時(shí)間: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ù)和賦值操作符》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫

1、類的構(gòu)造函數(shù)、析構(gòu)函數(shù)、復(fù)制構(gòu)造函數(shù)和賦值操作符作者:lyb661時(shí)間:20140318首先,回顧一下有關(guān)函數(shù)的知識(shí)。函數(shù)聲明一般由三個(gè)部分組成:返回類型、函數(shù)名和由圓括號(hào)括起來的參數(shù)表。(1)函數(shù)可以沒有返回類型,這時(shí)返回類型由void表示;(2)函數(shù)名標(biāo)志函數(shù)的接口,也是與其他函數(shù)區(qū)別的標(biāo)志;(3)函數(shù)可以沒有參數(shù),也可以有一至多個(gè)參數(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ù)。其中有幾個(gè)特殊的成員函數(shù),對(duì)類來說至為重要。1、類的構(gòu)造函數(shù)(consructor):構(gòu)造函數(shù)用于創(chuàng)建類對(duì)象時(shí)完成必要的初始化工作。所有的類都需要構(gòu)造函數(shù)。它沒有返回類型,函數(shù)與類同名,可以沒有,也可以有多個(gè)參數(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)對(duì)于任何類,編譯器會(huì)自動(dòng)調(diào)用一個(gè)默認(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){}就是一個(gè)重載的有默認(rèn)值的構(gòu)造函數(shù)。當(dāng)創(chuàng)建對(duì)象a(10)時(shí)只有調(diào)用它才能正常工作。注意到該構(gòu)造函數(shù)的參數(shù)有個(gè)默認(rèn)值"0"。如果沒胡這個(gè)0,則對(duì)象b就不能被建立。它代替默認(rèn)構(gòu)造函數(shù)的部分工作。對(duì)于這個(gè)簡(jiǎn)單的Data類,它的默認(rèn)構(gòu)造函

5、數(shù)應(yīng)該是這樣:Data(){}。這個(gè)由編譯器合成的構(gòu)造函數(shù)用于創(chuàng)建一個(gè)對(duì)象而不顯式地初始化。如果用這個(gè)默認(rèn)構(gòu)造函數(shù)替換我們自己定義的構(gòu)造函數(shù),則a對(duì)象的建立是無效的,而對(duì)象b的成員初始值是無定義的,有興趣的話可以自己試一試。當(dāng)然,也可以用成員函數(shù)read()來完成一些初始化工作??傊襁@樣一個(gè)簡(jiǎn)單的類,默認(rèn)構(gòu)造函數(shù)的工作也不是盡如人意的。對(duì)于復(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),由于類具有指針成員,并且申請(qǐng)自由存儲(chǔ),所以重新定義了析構(gòu)函數(shù)的行為,用于刪除指針。2、類的析構(gòu)函數(shù)(destructor):析構(gòu)函數(shù)與類同名,在名字前加符號(hào)~以與構(gòu)造函數(shù)相區(qū)別。析構(gòu)函數(shù)用于在類對(duì)象超出作用域時(shí)按類中聲明次序的逆序撤銷各個(gè)成員。與構(gòu)造函數(shù)有所不同:盡管類定義了自己的析構(gòu)函數(shù),編譯器合成的析構(gòu)函數(shù)也會(huì)正常工作。由于函數(shù)重載規(guī)則的限制,析構(gòu)函數(shù)是不能被重載的。為什么?我們所謂自定義的意思,不過在它常規(guī)工作量外給它加了點(diǎn)的擔(dān)子。對(duì)于上面的Data類來說,它的默認(rèn)的析構(gòu)函數(shù)~Data(){}的工作并不能令人滿意。該類有一

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

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

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

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