天天看點

第七章 類

7.1

第七章 類
第七章 類

View Code

7.2

第七章 類
第七章 類

7.3

第七章 類
第七章 類

7.4&7.5

第七章 類
第七章 類

應該是cosnt成員函數,在這兩個函數體内不應該修改成員資料的值。

7.6&7.7

第七章 類
第七章 類

7.8

read函數:從給定的流中将資料讀到給定的對象裡(可能函數裡有要改變對象的值的操作)

print函數:将給定對象的内容列印到給定的流中(直接列印對象的内容,無需改變對象的值)

7.9

第七章 類
第七章 類

條件部分的作用:連續輸入兩次資料

7.11

第七章 類
第七章 類

7.12

7.13

第七章 類
第七章 類

7.14

7.15

第七章 類
第七章 類

7.16

沒有特别的位置與次數限制

public成員定義類的接口

private成員封裝(隐藏)了類的實作細節

7.17

有差別,class預設是private,struct預設是public

7.18

封裝是把類的資料成員與接口分離,實作對資料的隐藏和保護。封裝可以防止使用者在不經意間對類資料的改變,封裝好的類可以直接讓别的使用者直接使用,就像基本類型一樣,而不需要使用者對代碼的修改。

友元的用處:允許其他類或函數通路本類的非公有成員

使用友元的好處:可以使一些非本類的成員函數能通路到類的非公有成員;

缺點是:破壞了類的封裝、可維護性、可靠性。

7.21

第七章 類
第七章 類

7.22

第七章 類
第七章 類

7.23

第七章 類
第七章 類

7.24

7.25

能,因為Screen的資料成員都是自帶拷貝或指派相關的函數。

7.26

7.27

第七章 類
第七章 類

7.28

第二個display将列印一片X,沒有#,原因是傳回的不是引用,這樣在myScreen調用move傳回的是一個對象,這個對象已經和myScreen沒關系了。

優點:可以非常明确地指出通路的是調用該函數的對象的成員,且可以在成員函數中使用與資料成員同名的形參

缺點:太多餘了

7.31

7.32

第七章 類
第七章 類

7.33

編譯器報錯:[Error] 'pos' does not name a type

修正:指定size函數的傳回類型是屬于哪個類,即

7.34

會導緻編譯出錯,因為對 pos 的使用出現在它的聲明之前,此時編譯器并不知道pos到底是什麼含義。

7.35

Type使用的是類内的定義;類外的initVal的傳回類型是string,類内的initVal的傳回類型是double。

代碼存在錯誤,修正後:

7.36

rem應先被定義:

7.37

7.38

7.39

不合法,因為存在多個預設構造函數。

7.40

Book,構造函數如下:

7.41

第七章 類
第七章 類

7.42

第七章 類
第七章 類

7.43

第七章 類
第七章 類

7.44

非法,因為NoDefault沒有預設構造函數

7.45

合法,C有預設構造函數

7.46

a 錯誤:可以不提供構造函數,此時會自動生成一個預設構造函數

b 錯誤:帶預設參數構造函數也是預設構造函數

c 錯誤:就算怎麼無意義,也最好提供一個預設值

d 錯誤:在不定義任何構造函數的情況下才會自動提供一個預設的構造函數

7.47

這個随便,因為這是一把雙刃劍

不帶explicit的優點:可以從構造函數的參數類型向類類型隐式轉換

帶explicit的優點:任何構造函數(尤其是帶一個參數的)都不能隐式地建立類對象

帶explicit的缺點:該構造函數隻能以直接初始化的形式使用

7.48

第一行建立了一個string對象,第二行和第三行都是調用Sales_data的構造函數

不是explicit時:

item1對象會被成功建立

item2對象也會被成功建立

是explicit時:

item1對象會被成功建立(因為直接初始化)

item2對象也會被成功建立(同上)

7.49

(a)合法 

(b)不合法,Salesdata &類型與Salesdata類型之間不可轉換 

(c)不合法,把combine聲明成了常量成員函數,是以該函數無法修改資料成員的值

7.51

string接受的單參數是const char*類型,如果我們得到了一個常量指針,則把它看做string對象是自然而然的過程,編譯器自動把參數類型轉換成類類型也非常符合邏輯,是以我們無須指定為explicit。

與string相反,vector接受的單參數是int類型,這個參數的原意是指定vector的容量。如果我們在本來需要vector的地方提供一個int值并且希望這個int值自動轉換成vector,則這個過程顯得比較牽強,是以把vector的單參數構造函數定義成explicit的更加合理。

例如:定義為explicit是為了防止隐式的類型轉換

7.52

"978-0590353403"初始化bookNo成員;

25初始化units_sold成員;

15.99初始化revenue成員。

7.53

7.54

不應該,因為constexpr函數必須傳回值

7.55

是的,首先它是一個聚合類,其次它的資料成員都是字面值類型

7.56

類的靜态成員:與類關聯在一起的成員

優點:存在于任何對象之外,讓所有對象共享(不需要在每個對象中都設定)

差別:靜态成員的類型可以是它所屬的類類型;可以使用靜态成員作為預設實參

7.57

第七章 類
第七章 類

7.58

類内進行了兩條靜态資料成員的初始化,而他們又并非常量類型,修改後:

第七章 類
第七章 類
上一篇: 第七章