标准C++开发入门与编程实践
20世紀80年代,Bjarne Stroustrup發明并實現了C++語言。一開始C++語言只是作為C語言的增強版(C with Classes)出現的,但是隨著C++編程技術的發展,虛函數、運算符重載、多重繼承、模板、異常、RTTI、名字空間等新的特性逐漸被加入C++。由此,1998年國際標準組織(ISO)正式頒布C++程序設計語言的國際標準ISO/IEC 14882?1998,即標準C++語言。
在OOP(面向對象編程)理論盛行的年代(其實也就是10年之前),幾乎所有的C++教材,都在宣揚著一種論調:“C++是C的一個超集”,以此宣傳C++的易學性和親和力。實際上,這種說法在漸漸地發生改變。以Standley Lippman所著的《C++ Primer》一書為首的更多的言論認為,就目前學習C++而言,可以認為它是一門獨立的語言。它兼容C語言,但是并不依賴C語言,我們完全可以不學習C語言,而直接學習C++語言。也就是說,閱讀本書的讀者,不必擔心自己是否熟悉C語言。
C++語言發展至今,歷受Java、C#語言的沖擊,其優勢及應用領域則變得愈來愈清晰明朗。C++語言目前仍然是專業編程人員的首選語言之一。但是C++語言是一門很復雜的語言。正因為如此,很多程序員仍然固執地認為:C++是唯一的真正的編程語言;很多學校仍然選擇C++作為程序設計的第一門語言。這就要求C++初學者必須掌握合理的學習方法和正確的思維習慣,同時要保持足夠的信心和耐心,才能真正學好C++語言。
ISO/IEC 14882?1998確立了C++的標準,遺憾的是,由于C++語言過于復雜,以及它經歷了多年的演變,幾乎沒有一種編譯器100%的完全符合標準??上驳氖?#xff0c;各家編譯器也在努力提高對C++標準的兼容性。這就意味著,采用標準C++,可以在最大程度上使編寫的代碼具有可移植性;同樣的代碼,可以在超級計算機的分布式計算環境中和某個嵌入式系統中一樣得以編譯和運行。因此,當程序員看到一個有用的C++類庫的時候,他的第一個問題會是:它是基于標準C++編寫的嗎?同樣的,當讀者看到一本新的C++圖書上市時,他的第一個問題會是:這本書介紹的是標準的C++嗎?
本書介紹的是標準的C++,其中大部分代碼都在Microsoft Visual C++.NET 2003和Dev C++4.9.9.2中得以編譯與運行。Visual C++.NET和Dev C++是Windows下兩款優秀的C++開發工具,據稱它們采用的C++編譯器對C++標準的支持率分別達到98%和96%。
歸結起來,本書具有如下特色:
- 注重知識的完整性。本書力求完整、系統地介紹C++的語法知識。書中同時安排了部分選讀內容,并在節標題上以星號“*”標出,希望讀者朋友們能夠通過這些部分的閱讀加深對前面知識的理解。 注重知識的趣味性。很多教材在保持了C++的嚴謹性的同時也拒絕了讀者,特別是拒絕了我們可愛的C++初學者。初學者的耐心和信心很容易受到打擊,本書努力讓讀者在失去耐心之前讀完所有的C++知識。
- 注重C++的標準性。如上所述,標準性是本書一直努力遵循的原則。為了便于讀者的理解,書中一些章節的某些編譯器對C++標準的實現做了部分的猜測,希望讀者朋友能夠通過這些內容加深對C++的理解,但千萬不要就此認為:所有的C++編譯器都將采用同樣的實現。
- 注重編程的實踐性。本書的每一章節,甚至每一知識點,都配有格式化的代碼示例。此外,本書第6篇特意安排了“C++編程實踐”,介紹C++的標準庫函數及實際操作指南,并結合一個《西游記》游戲的模擬程序演示了各種語法知識的綜合運用,以方便讀者學習。 本書內容系統、完整,共分為6篇24章。
第1篇:C++快速瀏覽篇。本篇介紹C++的語言背景和計算機數值系統知識,包括了解C++語言、計算機的數值表示和初識C++程序;結合示例工程HelloWorld,詳細介紹C++編程的具體步驟,以及C++語言的基本元素,讓讀者對C++語言有個整體上的認識。 第2篇:C++數據表達篇。本篇介紹C++中的數據類型,即如何將現實中的數據表達出來,包括C++基礎語法、數組與字符串(array & string)、指針與引用(pointer & reference)和自定義數據類型(UDT)等。 第3篇:C++過程設計篇。本篇介紹C++中的過程設計,即如何將靜態的數據流動起來,實現程序的邏輯,包括C++流程控制、C++函數和預處理(preprocessing)等。 第4篇:C++面向對象編程篇。本篇介紹C++中的面向對象編程(OOP),即類的使用方法,包括C++類(class)、類的特殊函數、繼承(inheritance)和多態(polymorphism)等。 第5篇:C++高級特性篇。本篇介紹C++的高級特性,讀者一旦掌握了這些高級特性,就可以更好地實現C++編程,包括模板(template)、C++異常處理(exception handling)、名字空間與域和運行時類型信息(RTTI)等。 第6篇:C++編程實踐篇。本篇結合C++的實際應用介紹C++的標準庫函數以及實際操作指南,包括C++標準庫、C++流、STL容器(STL container)、泛型算法(generic algorithm)、C++實踐指南和綜合實踐:《西游記》游戲模擬等。 本書具有由淺入深、通俗易懂和注重實踐等特點。本書由白喬編著,何洪波、楊漢瑋、沈良忠參與了部分章節編寫,并對內容安排提出了很好的意見和建議,在此一并感謝。希望讀者能夠通過本書的閱讀,對標準C++有清晰的認識,并掌握真正實用的編程思想和方法,從而能在C++編程路上走得更遠,這是我們最大的期望。
本書適合于沒有或者缺乏C++程序設計經驗的初學者作為標準C++語言的自學教材,同時也適合已掌握C++基礎編程技術、需要提高C++實踐能力(包括對標準庫函數、STL、泛型算法的使用),以及對標準C++感興趣的程序員進行閱讀。
由于成書倉促,書中紕漏和欠缺之處在所難免,特別是關于C++標準之實現、C++實踐指南等開放性的話題,言語之中有失偏頗之處,還望讀者不吝賜教和批評。聯系信箱:bluejoe2008@gmail.com,詳情請垂詢http://books.vcer.net/stdcpp。
目錄:
第1篇? C++快速瀏覽
?
第1章? 了解C++語言? ? 3
1.1? 編程語言? ? 4
1.1.1? 機器語言? ? 4
1.1.2? 匯編語言? ? 4
1.1.3? 高級語言? ? 5
1.2? C++發展簡史? ? 6
1.3? C++開發環境? ? 7
1.3.1? C++編譯器? ? 7
1.3.2? C++標準與編譯器? ? 8
1.3.3? C++開發環境? ? 9
1.3.4? 開發環境的選擇? ? 12
第2章? 計算機的數值表示? ? 15
2.1? 進制系統? ? 16
2.1.1? 十進制? ? 16
2.1.2? 二進制? ? 16
2.1.3? 八進制和十六進制? ? 17
2.2? 數值的表示? ? 19
2.2.1? 整數的表示? ? 19
2.2.2? 負數的表示? ? 19
2.2.3? 整數的表示范圍? ? 20
2.2.4? 浮點數的表示? ? 20
2.2.5? 觀察數值的二進制表示*? ? 22
2.3? 字符的表示? ? 23
2.3.1? ASCII碼? ? 23
2.3.2? 漢字的編碼? ? 25
2.3.3? UNICODE編碼? ? 26
2.3.4? 觀察字符的二進制表示*? ? 27
2.3.5? 字符與字體? ? 29
2.3.6? 鍵盤與輸入法? ? 29
第3章? 初識C++程序? ? 33
3.1? 開始C++編程? ? 34
3.1.1? C++程序的開發流程? ? 34
3.1.2? 文件與工程(項目)? ? 35
3.2? 在Dev-C++中開發HelloWorld? ? 37
3.2.1? 編輯HelloWorld? ? 38
3.2.2? 編譯連接HelloWorld? ? 38
3.2.3? 運行HelloWorld? ? 39
3.3? 在VC 2003中開發HelloWorld? ? 39
3.3.1? 編輯HelloWorld? ? 40
3.3.2? 編譯連接Hello World? ? 42
3.3.3? 運行HelloWorld? ? 43
3.4? 可能遇到的問題? ? 43
3.5? 理解HelloWorld? ? 45
3.5.1? main函數? ? 45
3.5.2? 函數? ? 45
3.5.3? 對象? ? 46
3.5.4? 頭文件? ? 46
3.5.5? 名字空間? ? 46
3.5.6? 標準輸入輸出? ? 47
3.5.7? 編譯器的行為? ? 48
第2篇? C++數據表達
第4章? C++基礎語法? ? 51
4.1? 理解c=2πr? ? 52
4.2? 注釋? ? 53
4.3? 標識符? ? 53
4.3.1? 命名規則? ? 53
4.3.2? 關鍵字? ? 54
4.4? 數與類型? ? 55
4.5? 基本類型? ? 55
4.5.1? 整型? ? 56
4.5.2? 浮點型? ? 56
4.5.3? 布爾型? ? 57
4.5.4? 字符型? ? 57
4.5.5? 基本類型的字節長度*? ? 57
4.6? 字面常量? ? 58
4.6.1? 整型常量? ? 59
4.6.2? 浮點型常量? ? 59
4.6.3? 布爾型常量? ? 59
4.6.4? 字符型常量? ? 60
4.6.5? 字符串常量? ? 60
4.6.6? 字面常量的類型*? ? 61
4.6.7? 變量? ? 62
4.7? 語句? ? 62
4.7.1? 表達式? ? 62
4.7.2? 語句? ? 62
4.7.3? 聲明語句? ? 62
4.7.4? 賦值語句? ? 63
4.7.5? 初始化語句? ? 63
4.7.6? 使用調試器觀察變量值*? ? 64
4.8? 操作符? ? 67
4.8.1? 賦值操作符? ? 67
4.8.2? 算術操作符? ? 68
4.8.3? 關系操作符? ? 69
4.8.4? 邏輯操作符? ? 69
4.8.5? 條件操作符? ? 70
4.8.6? 位操作符? ? 70
4.8.7? 觀察二進制位操作*? ? 71
4.8.8? 復合賦值操作符? ? 72
4.8.9? 逗號操作符? ? 73
4.8.10? sizeof操作符? ? 74
4.8.11? typeid操作符? ? 74
4.8.12? 操作符的優先級? ? 75
4.9? 類型轉換? ? 76
4.9.1? 隱式轉換? ? 76
4.9.2? 顯式轉換? ? 76
4.9.3? 算術轉換*? ? 77
第5章? 數組與字符串? ? 79
5.1? 數組? ? 80
5.1.1? 數組的概念? ? 80
5.1.2? 內存中的數組*? ? 80
5.1.3? 數組的初始化? ? 81
5.1.4? 數組元素的訪問? ? 82
5.1.5? 安全使用數組下標*? ? 82
5.1.6? 多維數組? ? 83
5.2? 字符串? ? 85
5.2.1? 傳統的字符串? ? 85
5.2.2? 安全的使用字符串*? ? 86
5.2.3? std::string? ? 86
第6章? 指針與引用? ? 89
6.1? 指針? ? 90
6.1.1? 指針的概念? ? 90
6.1.2? 取址操作符? ? 91
6.1.3? 取值操作符? ? 91
6.1.4? 深入理解指針*? ? 91
6.1.5? 指針的比較? ? 92
6.1.6? 指針的加減? ? 93
6.1.7? 理解指針的運算*? ? 93
6.1.8? 數組與指針? ? 95
6.1.9? 指針的指針? ? 96
6.1.10? 指針數組? ? 96
6.2? 引用? ? 96
6.2.1? 引用的概念? ? 96
6.2.2? 理解引用*? ? 97
6.3? 動態內存分配? ? 98
6.3.1? new? ? 98
6.3.2? delete? ? 98
6.3.3? 數組的內存分配? ? 99
第7章? 自定義數據類型? ? 101
7.1? 結構? ? 102
7.1.1? 結構的定義? ? 102
7.1.2? 定義結構變量? ? 103
7.1.3? 結構的數據成員? ? 103
7.1.4? 結構成員的引用? ? 103
7.1.5? 結構的初始化? ? 104
7.1.6? 位域? ? 105
7.2? 聯合? ? 106
7.2.1? 聯合的定義? ? 106
7.2.2? 使用聯合? ? 107
7.3? 枚舉? ? 108
7.3.1? 枚舉定義? ? 108
7.3.2? 枚舉與int? ? 109
7.4? typedef? ? 109
7.5? 數據類型修飾符? ? 110
7.5.1? const? ? 110
7.5.2? volatile? ? 112
第3篇? C++過程設計
第8章? C++流程控制? ? 115
8.1? 判斷? ? 116
8.1.1? if? ? 116
8.1.2? 語句塊*? ? 116
8.1.3? if…else? ? 116
8.1.4? if…else if…else? ? 117
8.1.5? 流程圖*? ? 118
8.2? 分支? ? 118
8.3? 循環? ? 121
8.3.1? while? ? 121
8.3.2? do…while? ? 124
8.3.3? for? ? 125
8.4? 跳轉語句? ? 126
8.4.1? 嵌套循環? ? 126
8.4.2? 使用break中止循環? ? 127
8.4.3? 使用break中止分支? ? 128
8.4.4? continue? ? 128
8.4.5? goto? ? 129
8.4.6? 合理使用goto語句*? ? 130
第9章? C++函數? ? 133
9.1? 函數? ? 134
9.1.1? 函數? ? 134
9.1.2? 函數調用? ? 134
9.1.3? 使用調試器觀察函數的調用*? ? 135
9.1.4? 函數參數? ? 137
9.1.5? 返回值? ? 138
9.2? 函數原型? ? 139
9.2.1? 函數原型(function prototype)? ? 139
9.2.2? main()函數? ? 141
9.2.3? 定義帶參數的main()函數*? ? 141
9.2.4? 默認參數? ? 142
9.2.5? 可變參數*? ? 144
9.2.6? 內聯函數? ? 146
9.3? 函數重載? ? 147
9.3.1? 函數的重載? ? 147
9.3.2? 重載函數的調用? ? 148
9.3.3? 安全連接? ? 149
9.3.4? 名字重組*? ? 150
9.4? 遞歸函數? ? 151
9.4.1? 遞歸函數? ? 151
9.4.2? 使用調試器觀察函數的遞歸調用*? ? 154
9.5? 函數與指針? ? 155
9.5.1? 指向函數的指針? ? 155
9.5.2? 理解函數指針*? ? 156
9.5.3? 函數與值傳遞? ? 157
第10章? 預處理? ? 159
10.1? 預處理指令? ? 160
10.2? 宏指令? ? 161
10.2.1? 宏? ? 161
10.2.2? 帶參數的宏? ? 162
10.2.3? 宏與常量、函數*? ? 163
10.2.4? #操作符? ? 164
10.2.5? ##操作符? ? 164
10.2.6? 取消宏? ? 164
10.2.7? C++預定義宏? ? 165
10.3? 條件編譯指令? ? 165
10.3.1? #if…#endif? ? 165
10.3.2? #else? ? 166
10.3.3? #elif? ? 166
10.3.4? #if defined和#if !defined? ? 167
10.3.5? #ifdef和#ifndef? ? 167
10.4? 文件包含指令? ? 168
10.4.1? #include? ? 168
10.4.2? 合理使用頭文件? ? 169
10.5? 其他標準指令? ? 170
10.5.1? #error? ? 170
10.5.2? #line? ? 171
10.5.3? #pragma? ? 171
第4篇? C++面向對象編程
第11章? C++的類? ? 175
11.1? 類與對象? ? 176
11.1.1? 對象? ? 176
11.1.2? 類? ? 176
11.2? 類的設計? ? 177
11.2.1? 類的定義? ? 177
11.2.2? 對象的定義? ? 178
11.2.3? 數據成員的訪問? ? 178
11.2.4? 成員訪問控制? ? 178
11.2.5? 成員函數? ? 179
11.2.6? 內聯成員函數? ? 181
11.2.7? 成員函數的重載? ? 182
11.2.8? this指針? ? 182
11.2.9? 內存中的類*? ? 183
11.3? 類的討論? ? 187
11.3.1? 類與結構? ? 187
11.3.2? 抽象性? ? 187
11.3.3? 封裝性? ? 188
11.4? 類的組合? ? 191
11.4.1? 使用類的組合? ? 191
11.4.2? 類的聲明? ? 193
第12章? 類的特殊函數? ? 195
12.1? 構造函數? ? 196
12.1.1? 構造函數(constructor)? ? 196
12.1.2? 帶參數的構造函數? ? 197
12.1.3? 初始值列表? ? 198
12.2? 成員初始值列表? ? 199
12.2.1? 使用成員初始值列表? ? 199
12.2.2? 對象成員初始化? ? 200
12.3? 析構函數? ? 201
12.3.1? 析構函數的定義? ? 201
12.3.2? 對象成員的構造與析構*? ? 202
12.4? 特殊構造函數? ? 203
12.4.1? 轉換構造函數? ? 204
12.4.2? explicit? ? 205
12.4.3? 拷貝構造函數? ? 206
12.5? 操作符函數? ? 207
12.5.1? 操作符重載? ? 208
12.5.2? 一元操作符重載? ? 208
12.5.3? 二元操作符重載? ? 209
12.5.4? 全局操作符的重載? ? 210
12.5.5? 可重載的操作符? ? 212
12.5.6? 類型轉換函數? ? 213
12.6? const與mutable? ? 214
12.6.1? const? ? 214
12.6.2? mutable? ? 216
12.7? 友元? ? 217
12.7.1? 聲明某個函數為友元? ? 217
12.7.2? 聲明某個類的成員函數 為友元? ? 218
12.7.3? 聲明某個類為友元? ? 219
第13章? 繼承? ? 221
13.1? 類的繼承? ? 222
13.1.1? 繼承的概念? ? 222
13.1.2? 類的繼承? ? 223
13.1.3? 內存中的派生類*? ? 224
13.1.4? protected? ? 226
13.1.5? 基類訪問控制? ? 227
13.2? 構造與析構? ? 228
13.2.1? 派生類的構造? ? 228
13.2.2? 基類的初始化? ? 229
13.2.3? 默認構造函數? ? 230
13.2.4? 派生類的析構? ? 230
13.3? 名字隱藏? ? 231
13.3.1? 數據成員的隱藏? ? 231
13.3.2? 成員函數的隱藏? ? 232
13.3.3? 理解隱藏? ? 233
第14章? 多態性? ? 235
14.1? 類型轉換? ? 236
14.1.1? 向上轉換? ? 236
14.1.2? 向下轉換? ? 236
14.2? 虛函數與多態? ? 237
14.2.1? 類型轉換帶來的問題? ? 237
14.2.2? 虛函數? ? 238
14.2.3? 虛函數的填充*? ? 239
14.2.4? 多態性? ? 239
14.2.5? 虛析構函數? ? 240
14.2.6? 純虛函數? ? 241
14.2.7? 抽象類? ? 241
14.3? 多級繼承? ? 242
14.3.1? 多級繼承的使用? ? 242
14.3.2? 虛函數的多次填充*? ? 244
14.4? 多繼承? ? 245
14.4.1? 多繼承的使用? ? 245
14.4.2? 多繼承帶來的問題? ? 247
14.4.3? 虛擬繼承? ? 249
第5篇? C++高級特性
第15章? 模板? ? 253
15.1? 函數模板? ? 254
15.1.1? 函數模板的概念? ? 254
15.1.2? 模板參數與函數參數? ? 255
15.1.3? 函數模板的實例化? ? 256
15.1.4? 函數模板的重載? ? 256
15.1.5? 函數模板的特化*? ? 257
15.2? 類模板? ? 258
15.2.1? 類模板的概念? ? 258
15.2.2? 類模板的成員函數? ? 258
15.2.3? 包含多個參數的類模板? ? 259
15.2.4? 類模板的默認參數? ? 260
第16章? C++異常處理? ? 263
16.1? 傳統的錯誤處理? ? 264
16.2? 拋出異常? ? 268
16.3? 捕獲異常? ? 268
16.3.1? 使用catch捕獲異常? ? 269
16.3.2? 捕獲不同類型的異常? ? 271
16.3.3? 捕獲所有的異常? ? 272
16.3.4? 在catch塊拋出異常? ? 273
16.3.5? 未捕獲的異常? ? 273
16.3.6? 定制terminate()的行為*? ? 274
16.4? 對拋出異常的聲明? ? 275
第17章? 名字空間與域? ? 277
17.1? 名字空間? ? 278
17.1.1? 名字空間定義? ? 278
17.1.2? using聲明? ? 279
17.1.3? using指令? ? 279
17.1.4? 名字空間的別名? ? 279
17.2? 作用域? ? 279
17.3? 局部作用域? ? 280
17.3.1? 局部作用域的概念? ? 280
17.3.2? for語句的作用域? ? 280
17.3.3? case語句塊的作用域? ? 280
17.3.4? 函數的作用域? ? 281
17.4? 局部變量的存儲類型? ? 281
17.4.1? 自動存儲類型? ? 281
17.4.2? 寄存器存儲類型? ? 282
17.4.3? 靜態存儲類型? ? 283
17.5? 名字空間域? ? 284
17.5.1? 全局域? ? 284
17.5.2? 外部存儲類型? ? 284
17.5.3? 文件域? ? 286
17.5.4? 名字空間域? ? 286
17.6? 類域? ? 286
17.6.1? 類域的概念? ? 286
17.6.2? static數據成員? ? 288
17.6.3? static成員函數? ? 290
17.7? 作用域的嵌套? ? 291
17.7.1? 語句塊的嵌套? ? 291
17.7.2? 名字空間的嵌套? ? 292
17.7.3? 類的嵌套? ? 292
17.7.4? 在語句塊中定義類? ? 293
17.7.5? 嵌套帶來的隱藏? ? 293
17.8? 對象的生命周期? ? 293
第18章? 運行時類型信息? ? 297
18.1? 動態類型的獲取? ? 298
18.1.1? typeid關鍵字? ? 298
18.1.2? type_info? ? 298
18.1.3? 打開RTTI開關*? ? 299
18.1.4? 獲取對象的動態類型? ? 300
18.2? C++風格的類型轉換? ? 301
18.2.1? 動態類型轉換dynamic_cast? ? 301
18.2.2? 靜態類型轉換static_cast? ? 303
18.2.3? 再解釋類型轉換reinterpret_cast? ? 304
18.2.4? 常類型轉換const_cast? ? 304
第6篇? C++編程實踐
第19章? C++標準庫? ? 307
19.1? C++標準庫的組成? ? 308
19.2? 字符串庫<string>? ? 309
19.2.1? 字符串的構造與賦值? ? 309
19.2.2? 字符串的連接? ? 309
19.2.3? 字符串的比較? ? 309
19.2.4? 字符串的下標? ? 310
19.2.5? 子串? ? 310
19.2.6? 字符串的查找? ? 311
19.2.7? string與C-style字符串? ? 311
19.2.8? 空字符串? ? 312
19.3? 復數類<complex>? ? 313
19.3.1? 復數的構造? ? 313
19.3.2? 復數的四則運算? ? 313
19.3.3? 復數的操作函數? ? 313
19.4? 異常類<stdexcept>? ? 314
19.5? C標準庫? ? 316
19.5.1? assert宏? ? 317
19.5.2? 類型函數? ? 318
19.5.3? 數學函數? ? 318
19.5.4? 類型轉換函數? ? 319
19.5.5? 隨機數函數? ? 319
19.5.6? 可變參數處理? ? 320
19.5.7? 內存操作函數? ? 321
19.5.8? 系統控制函數? ? 322
19.5.9? 字符串處理函數? ? 323
19.5.10? 時間處理函數? ? 324
第20章? C++流? ? 327
20.1? 輸入輸出流<iostream>? ? 328
20.1.1? 輸入輸出流? ? 328
20.1.2? 流操作符? ? 328
20.1.3? 格式化輸出函數? ? 329
20.1.4? 格式操縱符? ? 330
20.1.5? 流的輸出? ? 332
20.1.6? 緩沖輸出? ? 332
20.1.7? 流的輸入? ? 333
20.1.8? 狀態標志*? ? 335
20.2? 標準輸入輸出流? ? 336
20.3? 文件流<fstream>? ? 337
20.3.1? 文件的打開和關閉? ? 338
20.3.2? 二進制輸入輸出? ? 340
20.3.3? 定位文件位置? ? 341
20.4? 字符串流<sstream>? ? 342
20.4.1? ostringstream? ? 343
20.4.2? istringstream? ? 343
20.4.3? stringstream? ? 344
第21章? STL容器? ? 345
21.1? 標準模板庫? ? 346
21.1.1? STL的概念? ? 346
21.1.2? STL的組成? ? 348
21.1.3? STL的使用實例? ? 348
21.2? 容器? ? 350
21.2.1? STL容器? ? 350
21.2.2? 容器的模板參數? ? 351
21.2.3? 容器的比較? ? 352
21.2.4? 容器的賦值和交換? ? 352
21.2.5? operator []? ? 352
21.2.6? 指示器的獲取? ? 352
21.2.7? 元素的迭代訪問? ? 353
21.2.8? 容器的尺寸? ? 353
21.3? 向量? ? 353
21.3.1? 向量的構造? ? 354
21.3.2? 向量元素的訪問? ? 354
21.3.3? 向量元素的添加? ? 355
21.3.4? 向量元素的刪除? ? 355
21.4? 列表? ? 355
21.4.1? 列表的構造? ? 356
21.4.2? 列表元素的訪問? ? 356
21.4.3? 列表元素的添加? ? 356
21.4.4? 列表元素的刪除? ? 356
21.5? 雙端隊列? ? 357
21.5.1? 雙端隊列的構造? ? 357
21.5.2? 雙端隊列元素的訪問? ? 357
21.5.3? 雙端隊列元素的添加? ? 357
21.5.4? 雙端隊列元素的刪除? ? 357
21.6? 容器適配器? ? 358
21.6.1? 棧? ? 358
21.6.2? 隊列? ? 358
21.6.3? 優先級隊列? ? 359
21.7? 映射? ? 360
21.7.1? 映射的構造? ? 360
21.7.2? 映射元素的訪問? ? 361
21.7.3? 映射元素的添加? ? 362
21.7.4? 映射元素的刪除? ? 362
21.7.5? 映射元素的查找? ? 362
21.7.6? 多重映射? ? 362
21.8? 集合? ? 363
21.8.1? 集合的構造? ? 363
21.8.2? 集合元素的訪問? ? 364
21.8.3? 集合元素的添加? ? 364
21.8.4? 集合元素的刪除? ? 364
21.8.5? 集合元素的查找? ? 364
21.8.6? 多重集合? ? 365
21.9? 位集合? ? 365
21.9.1? 位集合的概念? ? 366
21.9.2? 位集合的構造? ? 366
21.9.3? 位集合的輸出? ? 366
21.9.4? 位元素的操作? ? 366
21.9.5? 位集合的賦值與轉換? ? 367
21.9.6? 位集合的尺寸? ? 367
21.9.7? 位集合的比較? ? 367
21.9.8? 位集合的位操作? ? 368
第22章? 泛型算法? ? 369
22.1? 指示器? ? 370
22.1.1? 指示器的獲取? ? 370
22.1.2? 指示器的數據類型? ? 370
22.1.3? 指示器的迭代? ? 370
22.1.4? 迭代的方向*? ? 372
22.1.5? 指示器的迭代類型? ? 372
22.2? 指示器適配器? ? 373
22.2.1? 反向指示器? ? 373
22.2.2? 插入型指示器? ? 374
22.3? 函數對象? ? 374
22.4? 算法? ? 376
22.4.1? 查找算法? ? 377
22.4.2? 排序與通用整序算法? ? 378
22.4.3? 刪除和替換算法? ? 379
22.4.4? 排列組合算法? ? 380
22.4.5? 算術算法? ? 380
22.4.6? 生成和異變算法? ? 381
22.4.7? 關系算法? ? 381
22.4.8? 集合算法? ? 382
22.4.9? 堆算法? ? 383
第23章? C++實踐指南? ? 385
23.1? 提高代碼的可讀性? ? 386
23.1.1? 不要吝嗇注釋? ? 386
23.1.2? 不要吝嗇空白? ? 388
23.1.3? 愛惜標識符? ? 390
23.1.4? 合理使用操作符函數? ? 391
23.1.5? 合理使用別名? ? 391
23.1.6? 合理使用跳轉語句? ? 392
23.2? 編寫笨的程序? ? 394
23.2.1? 書寫正常的表達式? ? 394
23.2.2? 使用bool類型進行判斷? ? 395
23.2.3? 保證對象的初始化? ? 396
23.2.4? 盡量多寫一些if? ? 397
23.2.5? 不要再發明string類? ? 398
23.2.6? 使用標準C++? ? 399
23.3? 合理使用內存? ? 399
23.3.1? C++中的內存? ? 399
23.3.2? 內存的非法訪問? ? 400
23.3.3? 內存泄漏? ? 402
23.3.4? 內存泄漏的檢測? ? 404
23.3.5? CMemory State? ? 405
23.3.6? 智能指針(auto_ptr)? ? 406
23.4? 合理使用OOP? ? 409
23.4.1? 合理封裝對象? ? 409
23.4.2? 對象拷貝的產生? ? 409
23.4.3? 對象的初始化? ? 412
23.4.4? 對象的賦值與初始化? ? 413
23.4.5? 合理使用繼承與組合? ? 414
23.4.6? 合理使用多繼承? ? 416
23.4.7? 合理使用虛函數和虛基類? ? 418
23.5? 不要教條主義? ? 420
第24章? 綜合實踐:《西游記》游戲模擬? ? 423
24.1? 功能分析? ? 424
24.1.1? 游戲運行界面? ? 424
24.1.2? 游戲角色劃分? ? 424
24.1.3? 戰斗的形成? ? 425
24.1.4? 兵器的分配? ? 425
24.2? 設計思路? ? 426
24.2.1? 使用類和繼承完成角色的設計? ? 426
24.2.2? 使用文件流加載角色列表? ? 426
24.2.3? 使用虛函數實現角色的多態? ? 427
24.2.4? 使用操作符的重載? ? 429
24.2.5? 使用異常處理提高程序的魯棒性? ? 429
24.2.6? 使用RTTI獲取角色的類別? ? 430
24.2.7? 使用STL容器管理角色? ? 431
24.2.8? 使用STL容器管理兵器? ? 432
24.2.9? 使用泛型算法完成查找與排序? ? 433
24.2.10? 使用循環和判斷完成主控邏輯? ? 435
24.3? 實現詳解? ? 435
24.3.1? Weapon? ? 436
24.3.2? Actor? ? 438
24.3.3? Monk? ? 443
24.3.4? ActorPowersAccumulater? ? 446
24.3.5? God? ? 446
24.3.6? Monster? ? 448
24.3.7? FollowerMonster? ? 449
24.3.8? GameException? ? 450
24.3.9? Game? ? 453
24.3.10? main()函數? ? 468
24.4? 運行并觀察游戲? ? 469
24.4.1? actors.ini? ? 469
24.4.2? 運行程序? ? 472
總結
以上是生活随笔為你收集整理的标准C++开发入门与编程实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浏览器对象存储数据详解
- 下一篇: QT获取调色板rgb色值