《C++ Primer》7.5.1节练习
練習(xí)7.36:
在類(lèi)X中,兩個(gè)數(shù)據(jù)成員出現(xiàn)的順序是rem在前,base在后,所以當(dāng)執(zhí)行X對(duì)象的初始化操作時(shí)先初始化rem。如上述代碼所示,初始化rem要用到base的值,而此時(shí)base尚未被初始化,因此會(huì)出現(xiàn)錯(cuò)誤。該過(guò)程與構(gòu)造函數(shù)初始值列表中誰(shuí)出現(xiàn)在前面誰(shuí)出現(xiàn)在后面沒(méi)有任何關(guān)系。
修改的方法很簡(jiǎn)單,只需要把變量rem和base的次序調(diào)換即可,形式是:
練習(xí)7.37:
Sales_data first_item(cin);使用了接受std::istream&參數(shù)的構(gòu)造函數(shù),該對(duì)象的成員值依賴(lài)于用戶(hù)的輸入。
Sales_data next;使用了Sales_data的默認(rèn)構(gòu)造函數(shù),其中string類(lèi)型的成員bookNo默認(rèn)初始化為空字符串,其他幾個(gè)成員使用類(lèi)內(nèi)初始值初始化為0。
Sales_data last(“9-999-99999-9”);使用了接受const string&參數(shù)的構(gòu)造函數(shù),其中bookNo使用實(shí)參初始化為"9-999-99999-9",其他幾個(gè)成員使用類(lèi)內(nèi)初始值初始化為0。
練習(xí)7.37:
滿(mǎn)足題意的構(gòu)造函數(shù)如下所示:
此時(shí)該函數(shù)具有了默認(rèn)構(gòu)造函數(shù)的作用,因此我們?cè)瓉?lái)聲明的默認(rèn)構(gòu)造函數(shù)Sales_data()= default;應(yīng)該去掉,否則會(huì)引起調(diào)用的二義性。
練習(xí)7.39:
如果我們?yōu)闃?gòu)造函數(shù)的全部形參都提供了默認(rèn)實(shí)參(包括為只接受一個(gè)形參的構(gòu)造函數(shù)提供默認(rèn)實(shí)參),則該構(gòu)造函數(shù)同時(shí)具備了默認(rèn)構(gòu)造函數(shù)的作用。此時(shí)即使我們不提供任何實(shí)參地創(chuàng)建類(lèi)的對(duì)象,也可以找到可用的構(gòu)造函數(shù)。
然而,如果按照本題的敘述,我們?yōu)閮蓚€(gè)構(gòu)造函數(shù)同樣都賦予了默認(rèn)實(shí)參,則這兩個(gè)構(gòu)造函數(shù)都具有了默認(rèn)構(gòu)造函數(shù)的作用。一旦我們不提供任何實(shí)參地創(chuàng)建類(lèi)的對(duì)象,則編譯器無(wú)法判斷這兩個(gè)(重載的)構(gòu)造函數(shù)哪個(gè)更好,從而出現(xiàn)了二義性錯(cuò)誤。
練習(xí)7.40:
首先選擇(a)Book,一本書(shū)通常包含書(shū)名、ISBN編號(hào)、定價(jià)、作者、出版社等信息,因此令其數(shù)據(jù)成員為:Name、ISBN、Price、Author、Publisher,其中Price是double類(lèi)型,其他都是string類(lèi)型。Book的構(gòu)造函數(shù)有三個(gè):一個(gè)默認(rèn)構(gòu)造函數(shù)、一個(gè)包含完整書(shū)籍信息的構(gòu)造函數(shù)和一個(gè)接受用戶(hù)輸入的構(gòu)造函數(shù)。其定義如下:
也可以選擇(f)Tree,一棵樹(shù)通常包含樹(shù)的名稱(chēng)、存活年份、樹(shù)高等信息,因此令其數(shù)據(jù)成員為:Name、Age、Height,其中Name是string類(lèi)型,Age是unsigned類(lèi)型,Height是double類(lèi)型。假如我們不希望由用戶(hù)輸入Tree的信息,則可以去掉接受std::istream&形參的構(gòu)造函數(shù),只保留默認(rèn)構(gòu)造函數(shù)和接受全部信息的構(gòu)造函數(shù)。其定義如下:
class Tree {private:string Name;unsigned Age = 0;double Height = 0;public:Tree() = default;Tree(const string &n,unsigned a,double h):Name(n),Age(a),Height(h); }總結(jié)
以上是生活随笔為你收集整理的《C++ Primer》7.5.1节练习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Faker年收入超4000万元 拥有自己
- 下一篇: 《C++ Primer》7.5.2节练习