13.1 拷貝建構式是什么?什么時候使用它?
答:
如果一個建構式的第一個引數是自身型別別的參考,且任何額外引數都有默認值,則此建構式是拷貝建構式,當使用拷貝初始化時,我們會用到拷貝建構式,
13.2 解釋為什么下面的宣告是非法的:

答:
引數型別應該是參考型別,
13.3 當我們拷貝一個StrBlob時,會發生什么?拷貝一個StrBlobPtr呢?
答:
當我們拷貝StrBlob時,會使 shared_ptr 的參考計數加1,當我們拷貝 StrBlobPtr 時,參考計數不會變化,
13.4 假定 Point 是一個型別別,它有一個public的拷貝建構式,指出下面程式片段中哪些地方使用了拷貝建構式:

答:
如上圖,共6處
13.5 給定下面的類框架,撰寫一個拷貝建構式,拷貝所有成員,你的建構式應該動態分配一個新的string,并將物件拷貝到ps所指向的位置,而不是拷貝ps本身:

答:

13.6 拷貝賦值運算子是什么?什么時候使用它?合成拷貝賦值運算子完成什么作業?什么時候會生成合成拷貝賦值運算子?
答:
拷貝賦值運算子是一個名為 operator= 的函式,當賦值運算發生時就會用到它,合成拷貝賦值運算子可以用來禁止該型別物件的賦值,如果一個類未定義自己的拷貝賦值運算子,編譯器會為它生成一個合成拷貝賦值運算子,
13.7 當我們將一個 StrBlob 賦值給另一個 StrBlob 時,會發生什么?賦值 StrBlobPtr 呢?
答:
會發生淺層復制,
13.8 為13.1.1節練習13.5中的 HasPtr 類撰寫賦值運算子,類似拷貝建構式,你的賦值運算子應該將物件拷貝到ps指向的位置,
答:

13.9 解構式是什么?合成解構式完成什么作業?什么時候會生成合成解構式?
答:
解構式是類的一個成員函式,名字由波浪號接類名構成,它沒有回傳值,也不接受引數,合成解構式可被用來阻止該型別的物件被銷毀,當一個類未定義自己的解構式時,編譯器會為它生成一個合成解構式,
13.11 為前面練習中的 HasPtr 類添加一個解構式,
答:

13.12 在下面的代碼片段中會發生幾次解構式呼叫?

答:
三次,分別是 accum、item1和item2,
13.13 理解拷貝控制成員和建構式的一個好方法的定義一個簡單的類,為該類定義這些成員,每個成員都列印出自己的名字:

給 X 添加拷貝賦值運算子和解構式,并撰寫一個程式以不同的方式使用 X 的物件:將它們作為非參考引數傳遞;動態分配它們;將它們存放于容器中;諸如此類,觀察程式的輸出,直到你確認理解了什么時候會使用拷貝控制成員,以及為什么會使用它們,當你觀察程式輸出時,記住編譯器可以略過對拷貝建構式的呼叫,
答:



13.14 假定 numbered 是一個類,它有一個默認建構式,能為每個物件生成一個唯一的序號,保存在名為 mysn 的資料成員中,假定 numbered 使用合成的拷貝控制成員,并給定如下函式:

則下面代碼輸出什么內容?

答:
輸出3個完全一樣的數,
13.17 分別撰寫前三題中所描述的 numbered 和 f,驗證你是否正確預測了輸出結果,
答:
13.14


13.15


13.16


13.18 定義一個 Employee 類,它包含雇員的姓名和唯一的雇員證號,為這個類定義默認建構式,以及接受一個表示雇員姓名的 string 的建構式,每個建構式應該通過遞增一個 static 資料成員來生成一個唯一的證號,
答:

13.19 你的 Employee 類需要定義它自己的拷貝控制成員嗎?如果需要,為什么?如果不需要,為什么?實作你認為 Employee 需要的拷貝控制成員,
答:
13.22 假定我們希望 HasPtr 的行為像一個值,即,對于物件所指向的 string 成員,每個物件都有一份自己的拷貝,我們將在下一節介紹拷貝控制成員的定義,但是,你已經學習了定義這些成員所需的所有知識,在繼續學習下一節之前,為 HasPtr 撰寫拷貝建構式和拷貝賦值運算子,
答:

13.26 對上一題中描述的 strBlob 類,撰寫你自己的版本,
答:




13.27 定義你自己的使用參考計數版本的 HasPtr,
答:


13.28 給定下面的類,為其實作一個默認建構式和必要的拷貝控制成員,

答:



13.30 為你的類值版本的 HasPtr 撰寫 swap 函式,并測驗它,為你的 swap 函式添加一個列印陳述句,指出函式什么時候執行,
答:


13.31 為你的 HasPtr 類定義一個 < 運算子,并定義一個 HasPtr 的 vector,為這個 vector 添加一些元素,并對它執行 sort,注意何時會呼叫 swap,
答:


13.34 撰寫本節所描述的 Message,
答:







13.39 撰寫你自己版本的 StrVec,包括自己版本的 reserve、capacity 和resize,
答:






13.40 為你的 StrVec 類添加一個建構式,它接受一個 initializer_list<string> 引數,
答:
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/264600.html
標籤:區塊鏈
上一篇:《貨幣戰爭》書中的精髓:世界政壇是一部大片,各國政客是主演,金融財團是導演,大家看到的一幕一幕情節,都是導演策劃的一場場戲。
下一篇:亞馬遜開店流程
