国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C++ > 正文

詳敘C++的構(gòu)造函數(shù),默認(rèn)構(gòu)造函數(shù)與析構(gòu)函數(shù)

2019-11-08 20:07:21
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
//聲明一個(gè)Data類class Data{public:Data(int _year, int _month, int _day) ://構(gòu)造函數(shù)year(_year),month(_month),day(_day){}Data(const Data&d)//拷貝構(gòu)造函數(shù){year = d.year;month = d.month;day = d.day;}Data(const Data&d) = delete;//阻止拷貝/*data(int y=10, int m=10, int d=10);在聲明構(gòu)造函數(shù)時(shí)指定默認(rèn)參數(shù)值構(gòu)造函數(shù)中參數(shù)的值既可以通過(guò)實(shí)參傳遞,也可以指定為某些默認(rèn)值,如果用戶不指定實(shí)參值,編譯系統(tǒng)就使形參取默認(rèn)值注意:應(yīng)在聲明函數(shù)時(shí)指定默認(rèn)值,而不能只在定義構(gòu)造函數(shù)時(shí)指定默認(rèn)值*/~Data(){}//析構(gòu)函數(shù)PRivate:int year;int month;int day;};/*構(gòu)造函數(shù):1.定義:是一個(gè)特殊的成員函數(shù),對(duì)對(duì)象進(jìn)行初始化,構(gòu)造函數(shù)名字必須與類名同名,無(wú)類型,無(wú)返回值,不需要用戶調(diào)用,也不能被用戶調(diào)用,在建立對(duì)象時(shí)自動(dòng)執(zhí)行,在對(duì)象的生命周期內(nèi)只調(diào)用一次2.可以在聲明構(gòu)造函數(shù)時(shí)指定默認(rèn)參數(shù)例如:data(int y=10, int m=10, int d=10);//如果用戶不指定實(shí)參值,編譯系統(tǒng)就使形參取默認(rèn)值注意:應(yīng)在聲明函數(shù)時(shí)指定默認(rèn)值,而不能只在定義構(gòu)造函數(shù)時(shí)指定默認(rèn)值3.初始化:1)初始化列表用于初始化數(shù)據(jù)成員,并不指定這些數(shù)據(jù)成員的初始化順序,數(shù)據(jù)在類中定義順序就是在參數(shù)列表中初始順序。2)盡量避免使用成員初始化成員,成員的初始化順序最好和成員定義的順序保持一致4.特性:1)函數(shù)名與類名相同2)沒(méi)有返回值3)有初始化列表(可以不用)4)新對(duì)象被創(chuàng)建,由編譯器自動(dòng)調(diào)用,且在對(duì)象的生命周期內(nèi)只調(diào)用一次。5)構(gòu)造函數(shù)可以重載,實(shí)參決定了調(diào)用哪一個(gè)構(gòu)造函數(shù)6)無(wú)參的構(gòu)造函數(shù)和帶有缺省值(缺省值不能隨便給,缺省值的個(gè)數(shù)可以是任意的,但是應(yīng)從右向左給定)的構(gòu)造函數(shù)都認(rèn)為是缺省構(gòu)造函數(shù),并且缺省構(gòu)造函數(shù)只能有一個(gè)。7)如果沒(méi)有顯示定義時(shí),編譯器會(huì)提供一個(gè)默認(rèn)構(gòu)造函數(shù)(不一定,看程序是否需要構(gòu)造函數(shù),詳細(xì)解釋見(jiàn)上篇博客“c++合成默認(rèn)構(gòu)造函數(shù)的真相”)。5.作用:構(gòu)建對(duì)象,初始化對(duì)象,類型轉(zhuǎn)換

拷貝構(gòu)造函數(shù):

1.定義:只有單個(gè)形參,而且該形參必須是本類對(duì)象的const引用(請(qǐng)思考為什么?),它是特殊的構(gòu)造函數(shù)創(chuàng)建對(duì)象時(shí)使用已經(jīng)存在的同類對(duì)象來(lái)進(jìn)行初始化,由編譯器自動(dòng)調(diào)用。2.特征:1)它是構(gòu)造函數(shù)的重載2)如果沒(méi)有顯式定義,系統(tǒng)會(huì)自動(dòng)合成一個(gè)默認(rèn)的拷貝構(gòu)造函數(shù),默認(rèn)的構(gòu)造函數(shù)會(huì)將其參數(shù)的成員逐個(gè)拷貝到正在創(chuàng)建的對(duì)象中。3)用途:a.對(duì)象實(shí)例化對(duì)象例如:data d1(2016,2,14);data d2(d1);b.將一個(gè)對(duì)象作為實(shí)參傳遞非引用類型的形參例如:void fun(const data d2){}c.從一個(gè)返回類型為非引用類型的函數(shù)返回一個(gè)對(duì)象data fun1(){   data d3;   return d3;}解答:為什么拷貝構(gòu)造函數(shù)形參必須是本類對(duì)象的const引用?若定義為:Data(const Data d)因?yàn)閰?shù)的傳遞本身就是復(fù)制,而復(fù)制一個(gè)臨時(shí)的Data對(duì)象的時(shí)候要調(diào)用拷貝構(gòu)造函數(shù)。(也就是自己,調(diào)用自己的時(shí)候又是一次參數(shù)傳遞,所以又要調(diào)用一次自己(即:調(diào)構(gòu)造函數(shù))),這樣會(huì)一直惡性循環(huán)下去,造成無(wú)休止遞歸調(diào)用。4.阻止拷貝:在新標(biāo)準(zhǔn)下,我們可以將拷貝構(gòu)造函數(shù)和拷貝賦值運(yùn)算符定義為刪除的函數(shù)(delete)來(lái)阻止拷貝,雖然我們聲明了刪除的函數(shù),但是不能以任何方式使用它們,格式為:在參數(shù)列表后面加上“=delete”來(lái)指出我們希望將它定義為刪除的。例如:Data(const Data&d) = delete;//阻止拷貝data &Operator=(const data&)=delete//阻止賦值注意:=delete必須出現(xiàn)在第一次聲明的地方,我們可以對(duì)任何函數(shù)指定=delete,雖然刪除函數(shù)主要作用是禁止拷貝控制成員,但當(dāng)我們希望引導(dǎo)函數(shù)匹配過(guò)程時(shí),刪除函數(shù)有時(shí)也是有用的。析構(gòu)函數(shù):1.定義:是類的一個(gè)成員函數(shù),與構(gòu)造函數(shù)功能相反,在對(duì)象被銷毀時(shí),編譯器自動(dòng)調(diào)用,釋放對(duì)象使用的資源(不是刪除對(duì)象),并銷毀對(duì)象的非static數(shù)據(jù)成員(static局部對(duì)象在函數(shù)調(diào)用結(jié)束時(shí)對(duì)象并不釋放,因此也不用調(diào)用析構(gòu)函數(shù),只有在main函數(shù)結(jié)束或調(diào)用exit函數(shù)結(jié)束程序時(shí)候,才調(diào)用static局部對(duì)象的析構(gòu)函數(shù))。2.先構(gòu)造的后析構(gòu),后構(gòu)造的先析構(gòu)(他相當(dāng)于一個(gè)棧,先進(jìn)后出)。3.析構(gòu)函數(shù)沒(méi)有返回值,沒(méi)有函數(shù)類型,也沒(méi)有函數(shù)參數(shù)。因此,它不能被重載,一個(gè)類可以有多個(gè)構(gòu)造函數(shù),但只有一個(gè)析構(gòu)函數(shù)。*/
上一篇:C++Student類

下一篇:C++析構(gòu)函數(shù)

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 武乡县| 巍山| 垣曲县| 百色市| 高陵县| 曲水县| 海门市| 拉孜县| 闽侯县| 北川| 东平县| 淮南市| 镇安县| 四会市| 上犹县| 普宁市| 阿克| 龙山县| 河曲县| 叶城县| 三台县| 云安县| 松阳县| 密山市| 泾阳县| 当阳市| 怀仁县| 宜兰县| 滨州市| 眉山市| 乌什县| 福海县| 收藏| 榆社县| 曲靖市| 威海市| 阜南县| 胶州市| 武汉市| 牡丹江市| 隆化县|