C++構(gòu)造函數(shù)和析構(gòu)函數(shù)詳解

構(gòu)造函數(shù)簡介

在上一個(gè)章節(jié)我們在創(chuàng)建好類的對象之后鱼喉,首先對它的每一個(gè)成員屬性賦值之后再對它們進(jìn)行輸出操作虐秋,如果不賦值就輸出,這些值就會是垃圾值努潘。而為了代碼的簡介诽偷,一次性為所有成員屬性初始化坤学,C++的類提供了這樣的一個(gè)函數(shù)—構(gòu)造函數(shù)。

C++提供構(gòu)造函數(shù)來處理對象的初始化报慕。

1.構(gòu)造函數(shù)是一種特殊的成員函數(shù)深浮,不需要用戶來調(diào)用,定義對象時(shí)被自動(dòng)執(zhí)行眠冈。

2.構(gòu)造函數(shù)名字與類名相同飞苇,無返回類型。

3.可以由用戶自己定義實(shí)現(xiàn)蜗顽,根據(jù)需要設(shè)計(jì)對數(shù)據(jù)成員進(jìn)行初始化布卡,依舊可以設(shè)置函數(shù)的默認(rèn)參數(shù)。

4.如果我們沒有定義構(gòu)造函數(shù)诫舅,系統(tǒng)會為我們自動(dòng)定義一個(gè)無參的默認(rèn)構(gòu)造函數(shù)的羽利,它不對成員屬性做任何操作,如果我們自己定義了構(gòu)造函數(shù)刊懈,系統(tǒng)就不會為我們創(chuàng)建默認(rèn)構(gòu)造函數(shù)了这弧。

默認(rèn)參數(shù)構(gòu)造函數(shù)

CTime() { }

帶參數(shù)的構(gòu)造函數(shù):這樣的一個(gè)構(gòu)造函數(shù)提供了一個(gè)三個(gè)成員屬性的初始化,聲明對象的時(shí)候就可以傳入?yún)?shù)了虚汛。

CTime time(Hour ,Minute, Second )匾浪;//對象的定義

CTime(int Hour ,int Minute,int Second ) {

m_nHour=Hour; m_nMinute=Minute; m_nSecond=Second; }

在有了構(gòu)造函數(shù)之后,我們聲明時(shí)傳入?yún)?shù)調(diào)用的構(gòu)造函數(shù)等同于下面注釋的代碼卷哩。此時(shí)因?yàn)橐呀?jīng)沒有了默認(rèn)的構(gòu)造函數(shù)把将,就不能再想上一個(gè)章節(jié)那樣不傳入?yún)?shù)進(jìn)行對象的創(chuàng)建了倘是。

構(gòu)造函數(shù)的重載

在一個(gè)類中可以有多個(gè)構(gòu)造函數(shù),它們構(gòu)成了函數(shù)的重載。

下面兩個(gè)構(gòu)造函數(shù)構(gòu)成了重載癌蚁,我們可以在聲明對象的時(shí)候傳入不同的參數(shù)調(diào)用不同的構(gòu)造函數(shù)。此時(shí)可以依舊像上一個(gè)章節(jié)那樣對象不傳入任何參數(shù)过吻,也不需要再對它們一一初始化退腥,這一切都有構(gòu)造函數(shù)做了。對象在創(chuàng)建的時(shí)候會根據(jù)傳入?yún)?shù)的類型來調(diào)用不同的構(gòu)造函數(shù)栋齿,這和普通函數(shù)的調(diào)用是一致的苗胀。

這是一個(gè)含有默認(rèn)參數(shù)的構(gòu)造函數(shù),默認(rèn)參數(shù)的函數(shù)的使用和我們在函數(shù)那一章的規(guī)則是一樣的瓦堵。


中間的構(gòu)造函數(shù)的所有參數(shù)都有默認(rèn)值基协,這樣是不可以的,在有三個(gè)構(gòu)造函數(shù)的情況下菇用,我們創(chuàng)建一個(gè)沒有傳入?yún)?shù)的對象的時(shí)候澜驮,它是應(yīng)該調(diào)用第一個(gè)無參的默認(rèn)構(gòu)造函數(shù)吶?還是第二個(gè)符合默認(rèn)參數(shù)規(guī)則的構(gòu)造函數(shù)吶惋鸥?這樣就造成了二義性杂穷,是不可以的鹅龄。

析構(gòu)函數(shù)簡介

它的作用與構(gòu)造函數(shù)相反,一般是執(zhí)行對象的清理工作亭畜,當(dāng)對象的生命周期結(jié)束的時(shí)候扮休,會自動(dòng)的調(diào)用。析構(gòu)函數(shù)的作用并不是刪除對象拴鸵,在對象撤銷它所占用的內(nèi)存之前玷坠,做一些清理的工作。清理之后劲藐,這部分內(nèi)存就可以被系統(tǒng)回收再利用了八堡。在設(shè)計(jì)這個(gè)類的時(shí)候,系統(tǒng)也會默認(rèn)的提供一個(gè)析構(gòu)函數(shù)聘芜。在對象的生命周期結(jié)束的時(shí)候兄渺,程序就會自動(dòng)執(zhí)行析構(gòu)函數(shù)來完成這些工作。同構(gòu)造函數(shù)汰现,用戶自己定義挂谍,系統(tǒng)自動(dòng)調(diào)用。

1.析構(gòu)函數(shù)沒有返回值瞎饲,沒有參數(shù)口叙;

2.沒有參數(shù),所以不能重載嗅战,一個(gè)類僅有一個(gè)析構(gòu)函數(shù)妄田;

3.析構(gòu)函數(shù)除了釋放工作,還可以做一些用戶希望它做的一些工作驮捍,比如輸出一些信息疟呐。

它的命名規(guī)則如下:

~CTime();

定義如下:這個(gè)析構(gòu)函數(shù)為了顯示它在什么時(shí)候被調(diào)用,我們利用它輸出一句話以告知我們它被調(diào)用了东且。

運(yùn)行結(jié)果如下:我們在main函數(shù)里面創(chuàng)建了四個(gè)CTime對象启具,所以在退出main函數(shù)之后,四個(gè)對象的生命周期結(jié)束苇倡,析構(gòu)函數(shù)被調(diào)用了四次富纸。如果我們是在main函數(shù)的外面創(chuàng)建的對象囤踩,這個(gè)對象的銷毀是在我們退出程序之后旨椒。析構(gòu)函數(shù)銷毀對象的順序與構(gòu)建對象的順序是相反的。因?yàn)閷ο蟮拇鎯κ窃跅V械亩率瑮5奶匦跃褪窍冗M(jìn)后出综慎。

如果我們使用new運(yùn)算符來動(dòng)態(tài)的創(chuàng)建一個(gè)對象,這個(gè)對象是不會自動(dòng)被銷毀的勤庐,我們需要手動(dòng)使用delete銷毀示惊,這個(gè)時(shí)候析構(gòu)函數(shù)隨著delete的使用而被調(diào)用好港,在程序結(jié)束的時(shí)候就不會再銷毀這個(gè)對象了。


原文鏈接:http://www.maiziedu.com/wiki/cplus/structure/


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末米罚,一起剝皮案震驚了整個(gè)濱河市钧汹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌录择,老刑警劉巖拔莱,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異隘竭,居然都是意外死亡塘秦,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門动看,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尊剔,“玉大人,你說我怎么就攤上這事菱皆⌒胛螅” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵仇轻,是天一觀的道長霹期。 經(jīng)常有香客問我,道長拯田,這世上最難降的妖魔是什么历造? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮船庇,結(jié)果婚禮上吭产,老公的妹妹穿的比我還像新娘。我一直安慰自己鸭轮,他們只是感情好臣淤,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著窃爷,像睡著了一般邑蒋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上按厘,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天医吊,我揣著相機(jī)與錄音,去河邊找鬼逮京。 笑死卿堂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播草描,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼览绿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了穗慕?” 一聲冷哼從身側(cè)響起饿敲,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎逛绵,沒想到半個(gè)月后诀蓉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡暑脆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年渠啤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片添吗。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡沥曹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出碟联,到底是詐尸還是另有隱情妓美,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布鲤孵,位于F島的核電站壶栋,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏普监。R本人自食惡果不足惜贵试,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凯正。 院中可真熱鬧毙玻,春花似錦、人聲如沸廊散。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽允睹。三九已至运准,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缭受,已是汗流浹背胁澳。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贯涎,地道東北人听哭。 一個(gè)月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓慢洋,卻偏偏與公主長得像塘雳,于是被迫代替她去往敵國和親陆盘。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容