7.5.2節的練習,可以自行選擇練習。
練習7.43
假定有乙個名為nodefault的類,它有乙個接受int的建構函式,但是沒有預設建構函式。定義類c,c有乙個nodefault型別的成員,定義c的預設建構函式。
解答:
struct nodefault
int data;
};struct c
nodefault no;
};
練習7.44
下面這條宣告合法嗎?如果不為什麼?
vectorvec(10);
解答:不合法,因為nodefault沒有預設建構函式。
練習7.45
如果在上個練習中定義的vector的元素型別是c,則宣告合法嗎?為什麼?
解答:這個合法,因為c有預設建構函式。
練習7.46
下面那些論斷是不正確的?為什麼?
(a) 乙個類必須至少提供乙個建構函式。
(b) 預設建構函式好似引數列表為空的建構函式。
(c) 如果對已類來說不存在有意義的預設值,則類不應該提供預設建構函式。
(d) 如果類沒有定義預設建構函式,則編譯器將為其生成乙個並把每個資料成員初始化成相應型別的預設值。
解答:(a) 錯。沒有提供建構函式的情況下,編譯器會為其生成乙個。
(b) 錯。預設建構函式也可以引數列表。
(c) 錯。無論是否有意義,要保證資料使用安全,最好將成員變數都進行初始化。
(d) 正確。
第七章 7 2節練習
練習7.16 在類的定義中對於訪問說明符出現的位置的次數由限定嗎?如果有是什麼?什麼樣的成員應該定義在public說明符之後,什麼樣的成員應該定義在private說明之後?解答 對次數和位置沒有嚴格的限制。簡單來說,想讓外部訪問到的成員應該定義在public之後,不想讓外部訪問的到的成員應該定義在p...
第七章 7 3 2節練習
練習7.27 給你自己的screen類新增move set和display函式,通過指向下面的 檢驗你的類是否正確。screen myscreen 5,5,x myscreen.move 4.0 set display cout cout n myscreen.display cout cout n...
第七章 7 5 4節練習
練習7.47 說明接受乙個string引數sales data建構函式是否應該是explicit的,並解釋這樣做的優缺點。解答 應該宣告成explicit,這樣做能讓物件構造的更加明確。缺點可能就是,在構造物件的時候,不注意會出現莫名的錯誤。練習7.48 假定sales data的建構函式不是exp...