原创 第六章 6.4節練習 & 6.5.1節練習

練習6.39 說明在下面的每組聲明中第二條聲明語句是何含義。如果有非法的聲明,請指出來。 (a) int calc(int, int); int calc(const int, const int); (b) int get(); dou

原创 第六章 6.6.1節練習 & 6.7節練習

練習6.52 已知有如下聲明, void manip(int, int); double dobj; 請指出下列調用中每個類型轉換的等級(參見6.6.1節,第219頁) (a) manip('a', 'z'); (b) manip(55.

原创 第五章 5.6.3節練習

練習5.23 編寫一段程序,從標準輸入讀取兩個整數,輸入第一個數除以第二個數的結果。 解答: #include <iostream> using namespace std; int main(){ int a, b; cin >

原创 第六章 6.2.4節練習

練習6.21 編寫一個函數,令其接受兩個參數:一個是int型的數,另一個是int指針。函數比較int的值和指針所指的值,返回較大的那個。在該函數中指針的類型應該是什麼? 解答: <pre name="code" class="cpp">#

原创 第六章 6.2.3節練習

練習6.16 下面的這個函數雖然合法,但是不算特別有用。指出它的侷限性並設法改善。 bool is_empty(string& s) {return s.empty();} 解答: 這裏推薦使用常量引用,或者是複製傳參。確保原始字符串不會

原创 第六章 6.1節練習

練習6.1 實參和形參的區別是什麼? 解答: 【引用】實參是形參的初始值。 練習6.2 指出下列函數哪個有錯誤,爲什麼?應該如何修改這些錯誤呢? (a) int f(){   string s;   // ...   return s;

原创 第六章 6.2.1節練習 & 6.2.2節練習

練習6.10 編寫一個函數,使用指針形參交換兩個整數的值。在代碼中調用該函數並輸出交換後的記過,以此驗證函數的正確性。 解答: #include <iostream> using namespace std; void swap(i

原创 第六章 6.1.1節練習

練習6.6 說明形參、局部變量以及局部靜態變量的區別。編寫一個函數,同時用到這三種形式。 解答: 只要定義有參數的函數,就會涉及到形參。 局部變量,就是隻能在局部使用的變量,無法在其他地方進行使用。當然,其還可以對全局同名變量進行隱藏。

原创 第六章 6.2.5節練習 & 6.2.6節練習

練習6.25 編寫一個main函數,令其接受兩個實參。把實參的內容鏈接成一個string對象並輸出出來。 解答: <pre name="code" class="cpp">#include <iostream> #include <str

原创 第七章 7.3.3節練習 & 7.4節練習

練習7.31 定義一對類X和Y,其中X包含一個指向Y的指針,而Y包含一個類型爲X的對象。 解答: class Y; class X{   int x;   Y *py; }; class Y{   int y;   X x; }; 練習

原创 第六章 6.5.3節練習 & 6.6節練習

練習6.47 改寫6.3.2節(第205頁)練習中使用遞歸輸出vector內容的程序,使其有條件地輸出與執行過程有關信息。例如,每次調用是輸出vector對象的大小。分別在打開和關閉調試器的情況下編譯並執行這個程序。 解答: 這裏具體的程

原创 第七章 7.2節練習

練習7.16 在類的定義中對於訪問說明符出現的位置的次數由限定嗎?如果有是什麼?什麼樣的成員應該定義在public說明符之後,什麼樣的成員應該定義在private說明之後? 解答: 對次數和位置沒有嚴格的限制。 簡單來說,想讓外部訪問到的

原创 第七章 7.2.1節練習 & 7.3.1節練習

練習7.20 友元在什麼時候用?請分別列舉出使用友元的利弊。 解答: 友元用在外部函數訪問類中私有成員的時候。 利弊在242頁的Note中也有提到。好處就不說了,壞處就是爲代碼的維護帶來了一定的難度。 練習7.21 ~ 練習7.24 略

原创 第七章 7.3.2節練習

練習7.27 給你自己的Screen類添加move、set和display函數,通過指向下面的代碼檢驗你的類是否正確。 Screen myScreen(5, 5, 'X'); myScreen.move(4.0).set('#').dis

原创 第六章 6.3.3節練習

練習6.36 編寫一個函數的聲明,使其返回數組的引用並且該數組包含10個string對象。不要使用位置返回類型、decltype或者類型別名。 解答: string[10]& fun();  string (& fun())[10];