构造器和析构器 - C++快速入门15
生活随笔
收集整理的這篇文章主要介紹了
构造器和析构器 - C++快速入门15
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
構(gòu)造器和析構(gòu)器
?讓編程改變世界
Change the world by program
?
定義構(gòu)造器
?回顧:之前我們討論了使用面向?qū)ο蟮木幊碳夹g(shù)開發(fā)程序最基本步驟:
定義一個(gè)有屬性和方法的類(模板)
為該類創(chuàng)建一個(gè)變量(實(shí)現(xiàn))
這是OOP技術(shù)的基礎(chǔ),小甲魚接著將逐步向大家介紹一些更復(fù)雜和更有用的概念。 首先是構(gòu)造器,它是類里的一種特殊的方法。 ?構(gòu)造器和通常方法的主要區(qū)別:
構(gòu)造器的名字必須和它所在的類的名字一樣 系統(tǒng)在創(chuàng)建某個(gè)類的實(shí)例時(shí)會(huì)第一時(shí)間自動(dòng)調(diào)用這個(gè)類的構(gòu)造器 構(gòu)造器永遠(yuǎn)不會(huì)返回任何值 ?創(chuàng)建構(gòu)造器,需要先把它的聲明添加到類里:
class Car {Car( void );
} ?注意大小寫與類名保持一致。在結(jié)束聲明之后開始定義構(gòu)造器本身:
Car::Car(void) ? ?// 不用寫 void Car::Car(void) {color = “WHITE”;
engine = “V8”;
wheel = 4;
gas_tank = FULL_GAS;
} ? 好,到這里我們就可以自己著手對(duì)之前打造的那輛跑車代碼進(jìn)行”改裝”了吧? 代碼下載地址 ?構(gòu)造對(duì)象數(shù)組
? 之前我們已經(jīng)說過,數(shù)組可以是任何一種數(shù)據(jù)類型,當(dāng)然也包括對(duì)象。 如:Car mycar[10]; 調(diào)用語法依舊是:mycar[x].running; 注:x代表著給定數(shù)組元素的下標(biāo)。 好了,自己造十幾輛法拉利”自慰下”。 ?Pay attention
? 每個(gè)類至少有一個(gè)構(gòu)造器,如果你沒有在類里定義一個(gè)構(gòu)造器,編譯器就會(huì)使用如下語法替你定義一個(gè):ClassName::ClassName() { } 這是一個(gè)沒有代碼內(nèi)容的空構(gòu)造器,除此之外,編譯器還會(huì)替你創(chuàng)建一個(gè)副本構(gòu)造器(CopyConstructor)。(這個(gè)遲些給大家介紹) 這一切都發(fā)生在幕后,而小甲魚在這里給大家提出主要目的是希望大家能夠了解構(gòu)造器有多么重要。 一種常見的做法是在創(chuàng)建對(duì)象的同時(shí)做一些事情(構(gòu)造器背后搞鬼),在對(duì)象創(chuàng)建出來之后用另一個(gè)方法做同樣或者不同的事情。 如:Car mycar;
mycar.setColor(“Yellow”);
? ?定義析構(gòu)器
? 從前邊的內(nèi)容我們了解到,在創(chuàng)建對(duì)象時(shí),系統(tǒng)都會(huì)自動(dòng)調(diào)用一個(gè)特殊的方法,即構(gòu)造器。 相應(yīng)地,在銷毀一個(gè)對(duì)象時(shí),系統(tǒng)也應(yīng)該會(huì)調(diào)用另一個(gè)特殊方法達(dá)到對(duì)應(yīng)效果? 沒錯(cuò),這就是析構(gòu)器。 ? 一般來說,構(gòu)造器用來完成事先的初始化和準(zhǔn)備工作(申請(qǐng)分配內(nèi)存),析構(gòu)器用來完成事后所必須的清理工作(清理內(nèi)存)。 構(gòu)造器和析構(gòu)器兩者相輔相成,有許多共同之處。首先,析構(gòu)器有著和構(gòu)造器/類一樣的名字,只不過前邊多了一個(gè)波浪符“~”前綴。 class Car {Car(void);
~Car();
} 其次,析構(gòu)器也永遠(yuǎn)不返回任何值。 另外,析構(gòu)器是不帶參數(shù)的。所以析構(gòu)器的聲明永遠(yuǎn)是如下格式:~ClassName(); 在我們剛剛的例子中析構(gòu)器可有可無。但是在比較復(fù)雜的類里,析構(gòu)器往往至關(guān)重要(可能引起內(nèi)存泄露)。 例如某個(gè)類的構(gòu)造器申請(qǐng)了一塊內(nèi)存,我們就必須在析構(gòu)器里釋放那塊內(nèi)存。 ? 不是每一滴牛奶都叫特倫蘇 [caption id="attachment_466" align="aligncenter" width="300"] 不是每一滴牛奶都叫特倫蘇[/caption] ? 演示:請(qǐng)?jiān)敿?xì)觀看視頻演示(代碼下載地址) [buy]?獲得所有教學(xué)視頻、課件、源代碼等資源打包?[/buy] [Downlink href='http://urlxf.qq.com/?J3eYnqy']視頻下載[/Downlink] [Downlink href='http://kuai.xunlei.com/d/LKOJJOXAFUPR']備胎下載[/Downlink]轉(zhuǎn)載于:https://www.cnblogs.com/LoveFishC/archive/2012/02/13/3847160.html
總結(jié)
以上是生活随笔為你收集整理的构造器和析构器 - C++快速入门15的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Struts 学习笔记2(输入校验、国际
- 下一篇: sql server 2008 日志处理