類的構(gòu)造函數(shù)和析構(gòu)函數(shù)

我們之前使用的初始化方法大多如下面的形式:

//1.
int year = 1998;

//2.
struct MyString
{
      char *ppp;
      int  num;
};
MyString bbb = {"DoubleKill",2};

接我們之前創(chuàng)建的Stock類。如果我們使用下面的方式初始化Stock類的對(duì)象,編譯器就會(huì)報(bào)錯(cuò)蹬昌,

Stock hot = {"M78,Inc.",400,11.11};

之所以不能像上面那樣初始化播玖,是因?yàn)閿?shù)據(jù)部分的訪問狀態(tài)是私有的踏志,程序不能直接訪問數(shù)據(jù)成員,如下:

Stock gift;
gift.buy(11,11.11);

Stock類之前的實(shí)現(xiàn)來說,gift對(duì)象的company成員是沒有值的。類設(shè)計(jì)假設(shè)用戶在調(diào)用任何其它成員函數(shù)之前調(diào)用acquire()组题,但是卻無法加強(qiáng)這種假設(shè)。這是個(gè)問題抱冷,避開這種問題的方法之一就是在創(chuàng)建對(duì)象時(shí)崔列,自動(dòng)對(duì)他進(jìn)行初始化。因此旺遮,我們需要使用類構(gòu)造函數(shù)赵讯。

一、類構(gòu)造函數(shù):

類構(gòu)造函數(shù)專門用于構(gòu)造新對(duì)象耿眉、將值賦值給它們的的數(shù)據(jù)成員瘦癌。類構(gòu)造函數(shù)的原型和函數(shù)頭有一個(gè)共同特點(diǎn):沒有返回值,但也沒有被聲明為void類型跷敬。

1.聲明和定義類構(gòu)造函數(shù)

我們給Stock類創(chuàng)建構(gòu)造函數(shù),程序在聲明對(duì)象時(shí)講自動(dòng)調(diào)用構(gòu)造函數(shù),構(gòu)造函數(shù)一般有下面三種原型樣式西傀;

Stock();
Stock(const string & co = "NSError",long n = 0, double pr = 0.0);

Stock(const string & co ,long n, double pr);

第一斤寇、三種原型的定義實(shí)現(xiàn)為:

Stock::Stock()
{
    cout << "Default constructor called " << endl;
    company = "No name";
    share_value = 0;
    share_value = 0.0;
    total_value = 0.0;
}

Stock::Stock(const string & co ,long n, double pr)
{
    company = co;
    if (n < 0)
    {
        cerr << "number of share can't be negative."
             << company
             << "shares set to 0."
             << endl;
        share = 0;
    }
    else
    {
        share = n;
    }
    share_value = pr;
    set_tot();
}

注意:

為了防止構(gòu)造函數(shù)的參數(shù)名和成員變量的名稱相同,在聲明成員變量時(shí)可以在前面加上m_或者在后面加上_拥褂。如下樣式:

class Test {
private:
    double m_share;
    double m_share_value;

    double total_value_;
    string company_;

public:

};

2.使用構(gòu)造函數(shù)

在C++中提供了兩種使用構(gòu)造函數(shù)初始化對(duì)象的方式
第一種:顯式調(diào)用構(gòu)造函數(shù)

    Stock fuck = Stock("L77.Xingyun.Inc", 1314, 22.22);

第二種:隱式調(diào)用構(gòu)造函數(shù)

    Stock penta_kill("L77.Xingyun.Inc", 1314, 22.22);
3.默認(rèn)構(gòu)造函數(shù)

定義默認(rèn)構(gòu)造函數(shù)的方式有兩種:
第一種:給已有構(gòu)造函數(shù)的所有參數(shù)提供默認(rèn)值

Stock(const string & co = "NSError",long n = 0, double pr = 0.0);

第二種:通過函數(shù)重載來定義一個(gè)沒有參數(shù)的構(gòu)造函數(shù)

Stock();

它的實(shí)現(xiàn)請(qǐng)參考上面的代碼娘锁。

注意
在設(shè)計(jì)一個(gè)類時(shí),通常應(yīng)提供對(duì)所有類成員做隱式初始化的默認(rèn)構(gòu)造函數(shù)
4.析構(gòu)函數(shù)

用構(gòu)造函數(shù)創(chuàng)建對(duì)象后饺鹃,程序負(fù)責(zé)跟蹤該對(duì)象莫秆,直到對(duì)象過期為止。在對(duì)象過期時(shí)悔详,程序?qū)⒆詣?dòng)調(diào)用一個(gè)特殊的成員函數(shù)來完成清理工作镊屎。
如果構(gòu)造函數(shù)使用new來分配內(nèi)存,則析構(gòu)函數(shù)將使用delete來釋放這些內(nèi)存茄螃。在Stock中構(gòu)造函數(shù)沒有使用new來分配 內(nèi)存缝驳,因此對(duì)應(yīng)的析構(gòu)函數(shù)實(shí)際上也就沒有需要完成的任務(wù)。
析構(gòu)函數(shù)归苍,比如Stock的析構(gòu)函數(shù)原型為:~Stock();,它的實(shí)現(xiàn)一般為:

Stock::~Stock()
{
    //Do something in here.
}
5.const成員函數(shù)

如下:

const Stock duke = Stock("The company string.");
duke.show();//complier refuse execute

編譯器會(huì)拒絕執(zhí)行第二步用狱,因?yàn)?code>duke是通過const修飾的Stock對(duì)象,不能被修改拼弃,但show()里面的代碼無法保證duke對(duì)象不被修改夏伊。
解決辦法:

1.聲明show()函數(shù)時(shí)在后面加const,即void show() const;.
2.實(shí)現(xiàn)show()函數(shù)吻氧,即溺忧,void Stock::show() const

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市医男,隨后出現(xiàn)的幾起案子砸狞,更是在濱河造成了極大的恐慌,老刑警劉巖镀梭,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刀森,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡报账,警方通過查閱死者的電腦和手機(jī)研底,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來透罢,“玉大人榜晦,你說我怎么就攤上這事∮鹌裕” “怎么了乾胶?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我识窿,道長斩郎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任喻频,我火速辦了婚禮缩宜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘甥温。我一直安慰自己锻煌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布姻蚓。 她就那樣靜靜地躺著宋梧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪史简。 梳的紋絲不亂的頭發(fā)上乃秀,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音圆兵,去河邊找鬼跺讯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛殉农,可吹牛的內(nèi)容都是我干的刀脏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼超凳,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼愈污!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起轮傍,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤暂雹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后创夜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體杭跪,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年驰吓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了涧尿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡檬贰,死狀恐怖姑廉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情翁涤,我是刑警寧澤桥言,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布萌踱,位于F島的核電站,受9級(jí)特大地震影響限书,放射性物質(zhì)發(fā)生泄漏虫蝶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一倦西、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赁严,春花似錦扰柠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至程剥,卻和暖如春劝枣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背织鲸。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來泰國打工舔腾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人搂擦。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓稳诚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瀑踢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子扳还,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

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