內容簡介
C++是近年來廣泛使用的程式設計語言,它在C語言的基礎上發展而來,實現了由面向過程到面向對象的轉變,全面支持面向對象的程式設計方法。
本書分為5部分,分別是C++基礎、面向對象編程、標準模板庫、底層開發和綜合案例。前4部分循序漸進地講解了C++程式的組成及開發過程、程式中的數據、語句和表達式、程式流程控制、數組與字元串、指針與引用、函式、函式模板、錯誤與異常處理、宏與預編譯、面向對象基礎、類的封裝、重載操作符和自定義轉換、類的繼承、多繼承和虛擬繼承、多態、類模板、檔案流、使用標準模板庫STL、序列式容器、關聯式容器、函式對象和算法、名稱空間、位操作和在C++中嵌入彙編等知識。最後一部分介紹了兩個套用C++的典型綜合案例——圖書管理系統和學生管理系統。
本書涉及面廣,從基本知識到高級內容和核心概念,再到綜合案例,幾乎涉及了C++開發的所有重要知識。
前言
C++是近年來最流行、最廣泛使用的程式設計語言之一。C++是在C語言的基礎上發展而來的,並實現了由面向過程到面向對象的轉變,全面支持面向對象的程式設計方法。C++語言在軟體行業一直處於領先地位,在其他領域中也有著廣泛的套用。同時,C++自身也在不斷完善,其未來發展方向也很明確,那就是作為高性能軟體開發的基礎,在平台軟體開發中發揮主要作用。
筆者長期從事C++的開發工作,十分了解初學者在學習過程中可能遇到的一些問題和困惑。本書的目的是讓初學者對C++語言有一個全面系統的認識。為了讓讀者能夠理解C++開發的核心思想,本書在講解的時候儘量結合筆者的獨特理解和感受,使讀者能夠舉一反三。此外,通過學習本書中的實例,讀者還能為學習其他高級語言打下基礎。
本書特色
1.內容全面系統,具有參考價值
作為C++的寶典書,本書介紹了C++語言的基礎知識、面向對象編程、標準模組庫、底層開發等多方面的內容,內容涉及面廣,從基本知識到高級內容和核心概念,再到綜合案例,幾乎涉及了C++開發的所有重要知識。
2.概念講解形象貼切,適合初學者學習
本書針對C++語言的特點,在講解各種語言概念的時候,都給出了實際的開發例子,並儘量使用圖形化講解,讓初學者在第一次接觸概念時就能夠迅速掌握。
3.實例貼近實際,加深理解程度
本書在講解知識點時,貫穿了大量有針對性的典型實例,並給出了對應的開發技巧,以便讓讀者更好地理解各種概念和方法,體驗實際編程方法,加深理解程度。
4.綜合實例講解,提高套用水平
本書每章的結尾都講解了針對本章內容的綜合實例,介紹如何綜合運用多種C++知識。最後一部分還詳細介紹了使用C++開發資料庫套用系統的全過程。通過這些綜合實例,可以快速提高讀者的C++套用水平。
本書內容及體系結構
第1部分 C++基礎(第1章~第11章)
本部分主要包括C++概述、C++程式的組成及開發過程、程式中的數據、語句和表達式、程式流程控制、數組與字元串、指針與引用、函式、函式模板、錯誤與異常處理、宏與預編譯等內容。通過本部分的學習,讀者可以掌握C++開發的基礎流程和C++編程的基本語法知識。
第2部分 面向對象編程(第12章~第19章)
本部分主要包括面向對象基礎、類的封裝、重載操作符和自定義轉換、類的繼承、多繼承和虛擬繼承、多態、類模板和檔案流等內容。通過本部分的學習,讀者可以掌握C++面向對象編程的核心概念和常用方法。
第3部分 標準模板庫(第20章~第24章)
本部分主要包括使用標準模板庫STL、序列式容器、關聯式容器、函式對象和算法、名稱空間等內容。通過本部分的學習,讀者可以掌握C++中標準模板庫STL的使用方法,以及與之相關的知識和方法。
第4部分 底層開發(第25章和第26章)
本部分主要包括位操作和在C++中嵌入彙編等內容。通過本部分的學習,讀者可以掌握C++中關於底層開發的核心內容。
第5部分 綜合案例(第27章和第28章)
本部分主要介紹兩個完整的C++套用系統的實現過程,即圖書管理系統和學生管理系統。通過本部分的學習,讀者可以學會如何全面套用前面章節所學的開發技術進行軟體項目開發,達到可以獨立開發項目的水平。
本書讀者對象
沒有任何程式語言學習經驗的C++語言初學者。
有志於成為C++語言程式設計師的讀者。
非計算機專業需要學習C++語言的讀者。
有程式語言基礎或正在學習數據結構需要參考C++語言的讀者。
本書作者
本書主要由李鵬程編寫,其他參與編寫的人員有張金霞、於鋒、張偉、曾廣平、劉海峰、劉濤、趙寶永、鄭蓮華、張濤、楊強、陳濤、羅淵文、李居英、郭永勝。在此對所有參與編寫的人員表示感謝!由於筆者水平有限,書中可能還存在疏漏和錯誤,還望廣大讀者批評指正。
目錄
第1部分 C++基礎 1
第1章 走進C++ 2
1.1 初識C++ 2
1.1.1 從C到C++ 2
1.1.2 從面向過程到面向對象 3
1.1.3 認識類與對象 4
1.1.4 面向對象編程的特點 5
1.2 C++的套用現狀 5
1.3 C++未來的發展 6
1.4 如何學習C++ 6
1.5 小結 7
第2章 C++程式的組成及開發過程 8
2.1 一般開發過程 8
2.2 從簡單程式開始 9
2.2.1 書寫原始碼 9
2.2.2 編譯成目標檔案 10
2.2.3 連結成可執行程式 10
2.2.4 運行程式 11
2.3 C++程式的組成 11
2.4 注釋 13
2.4.1 注釋的類型 13
2.4.2 使用注釋的注意事項 13
2.5 標準IO對象 13
2.6 使用名稱空間 14
2.7 編譯器和編譯過程 15
2.8 選擇集成開發環境 17
2.9 Dev-C++簡介 17
2.9.1 安裝 18
2.9.2 建立工程 19
2.9.3 編譯和運行 19
2.10 程式的調試 20
2.10.1 調試的基本過程 20
2.10.2 調試手段 21
2.10.3 調試實例 22
2.11 綜合實例 26
2.12 小結 27
第3章 程式中的數據 28
3.1 常量和變數 28
3.1.1 什麼是常量 28
3.1.2 什麼是變數 29
3.1.3 定義變數 29
3.1.4 初始化變數 30
3.1.5 為變數賦值 32
3.2 數據類型 32
3.2.1 整型 33
3.2.2 特殊整型 33
3.2.3 無符號整型 34
3.2.4 浮點型 34
3.2.5 字元型 35
3.2.6 無符號字元型 37
3.2.7 轉義字元 37
3.2.8 寬字元型 38
3.2.9 布爾型 38
3.3 變數與記憶體的關係 39
3.3.1 變數的地址 39
3.3.2 變數的位元組長度 39
3.3.3 計算數據的位元組長度 40
3.3.4 變數的取值範圍 41
3.4 自定義數據類型 42
3.4.1 結構體 42
3.4.2 共用體 43
3.4.3 枚舉體 44
3.5 用宏替換字面常量 44
3.6 用const定義常量 46
3.7 綜合實例 46
3.7.1 計算圓的周長和面積 46
3.7.2 三角形的類型判斷和面積計算 47
3.8 小結 49
第4章 語句和表達式 50
4.1 語句和語句塊 50
4.1.1 空格的作用 50
4.1.2 語句塊的組織 51
4.1.3 語句塊中的變數 51
4.2 什麼是表達式 51
4.3 運算符分類 52
4.3.1 算術運算符 52
4.3.2 算術運算的溢出 53
4.3.3 賦值運算符 53
4.3.4 自增和自減運算符 54
4.3.5 關係運算符 55
4.3.6 邏輯運算符 55
4.3.7 條件運算符 56
4.3.8 逗號運算符 56
4.3.9 位運算符 56
4.3.10 複合賦值運算符 58
4.4 運算符的優先權和結合性 58
4.5 類型轉換 59
4.5.1 隱式類型轉換 60
4.5.2 特殊的隱式轉換 61
4.5.3 顯式類型轉換 61
4.6 綜合實例 62
4.6.1 找出某個範圍內的素數 62
4.6.2 求最大值 64
4.7 小結 64
第5章 程式流程控制 65
5.1 程式流程的描述 65
5.1.1 偽碼 65
5.1.2 流程圖 65
5.2 分支 67
5.2.1 if語句 67
5.2.2 if…else語句 68
5.2.3 if…else語句的嵌套 70
5.2.4 switch語句 73
5.3 循環 76
5.3.1 while語句 76
5.3.2 do…while語句 78
5.3.3 for語句 79
5.4 循環控制語句 81
5.4.1 break語句 82
5.4.2 continue語句 82
5.5 流程跳轉語句goto 82
5.6 小結 83
第6章 數組與字元串 84
6.1 什麼是數組 84
6.2 定義數組 85
6.3 初始化數組 86
6.4 運算元組 87
6.5 數組的缺點 89
6.6 二維數組 89
6.6.1 什麼是二維數組 89
6.6.2 定義二維數組 90
6.6.3 二維數組的初始化 90
6.6.4 操作二維數組 92
6.6.5 二維數組的存儲 93
6.7 字元串 94
6.7.1 什麼是字元串 94
6.7.2 定義字元串 95
6.7.3 字元串的初始化 95
6.7.4 操作字元串 96
6.7.5 字元串的數組 97
6.8 字元串處理函式 98
6.8.1 字元串複製函式strcpy 98
6.8.2 計算字元串長度函式strlen 99
6.8.3 字元串連線函式strcat 100
6.8.4 字元串比較函式strcmp 101
6.9 綜合實例 102
6.9.1 數組元素排序 102
6.9.2 輸出楊輝三角 104
6.9.3 字元串處理函式的使用 106
6.10 小結 107
第7章 指針與引用 108
7.1 什麼是指針 108
7.1.1 指針與記憶體的關係 108
7.1.2 定義指針變數 109
7.1.3 使用指針指向數據 110
7.1.4 獲取被指數據 110
7.1.5 指針的運算 112
7.2 指針與數組 113
7.2.1 指向數組的指針 114
7.2.2 使用指針訪問數組 114
7.2.3 指向字元串的指針 116
7.3 指針與動態記憶體分配 120
7.3.1 程式中記憶體的分配方式 120
7.3.2 在堆上分配記憶體 121
7.3.3 釋放堆上的記憶體 122
7.4 const與指針 123
7.4.1 指向const的指針 123
7.4.2 const指針 124
7.4.3 指向const的const指針 125
7.5 引用 125
7.5.1 定義引用 125
7.5.2 常引用 126
7.6 引用與指針的區別 127
7.7 綜合實例 127
7.7.1 數組元素排序 127
7.7.2 輸出楊輝三角 128
7.8 小結 130
第8章 函式 131
8.1 什麼是函式 131
8.1.1 函式的組成部分 131
8.1.2 調用函式 132
8.1.3 為什麼要使用函式 133
8.2 函式的聲明和定義 133
8.2.1 函式的參數列表 133
8.2.2 調用函式前先聲明 134
8.2.3 在頭檔案中聲明函式 134
8.2.4 定義函式 135
8.2.5 函式實例——判斷閏年 136
8.3 參數傳遞 138
8.3.1 函式的形參和實參 138
8.3.2 值傳遞 139
8.3.3 參數類型檢查 139
8.3.4 使用默認實參 140
8.4 指針和引用參數 141
8.4.1 指針參數 141
8.4.2 數組參數 143
8.4.3 引用參數 146
8.5 函式中的變數 146
8.5.1 局部變數 146
8.5.2 全局變數 147
8.5.3 全局變數的初始化 148
8.5.4 多個源檔案共享全局變數 148
8.5.5 靜態變數 149
8.5.6 全局靜態變數 150
8.6 遞歸函式 151
8.7 內聯函式 152
8.8 函式重載 154
8.8.1 為什麼需要函式重載 154
8.8.2 什麼時候需要重載函式 155
8.8.3 函式重載解析 156
8.9 函式指針 157
8.9.1 函式地址 157
8.9.2 定義函式指針 158
8.9.3 使用函式指針調用函式 159
8.9.4 函式指針的用途 160
8.10 綜合實例 161
8.10.1 判斷素數 161
8.10.2 分割字元串 163
8.11 小結 165
第9章 函式模板 166
9.1 為什麼要使用函式模板 166
9.2 定義函式模板 168
9.2.1 抽取通用算法邏輯 168
9.2.2 語法 169
9.2.3 使用非類型參數 170
9.3 使用函式模板 170
9.3.1 實例化函式模板 171
9.3.2 取函式模板的地址 172
9.3.3 函式模板實參的推演 174
9.3.4 顯式指定函式模板的實參 175
9.4 實參推演中的類型轉換 175
9.4.1 左值轉換 176
9.4.2 限定符修飾轉換 176
9.4.3 到基類的轉換 178
9.5 函式模板的編譯 179
9.5.1 函式模板的兩種編譯方式 179
9.5.2 函式模板實例的編譯時機 180
9.6 函式模板定義中的標識符解析 181
9.7 函式模板的特化 182
9.8 函式模板的重載 184
9.9 函式匹配規則 185
9.10 綜合實例 186
9.10.1 數組求和函式模板 186
9.10.2 數組排序函式模板 188
9.11 小結 190
第10章 錯誤與異常處理 191
10.1 識別和處理錯誤 191
10.1.1 利用函式返回值識別錯誤 191
10.1.2 對錯誤結果做出相應處理 192
10.2 什麼是異常 194
10.2.1 什麼時候出現異常 194
10.2.2 異常與錯誤的區別 195
10.3 拋出異常 195
10.3.1 主動拋出異常 195
10.3.2 自定義異常類 197
10.4 捕獲異常 198
10.4.1 try塊 198
10.4.2 異常處理器 198
10.4.3 異常對象 200
10.4.4 棧展開 200
10.4.5 重新拋出 202
10.4.6 捕獲全部異常 203
10.5 函式與異常 204
10.5.1 異常規格說明 204
10.5.2 異常安全的函式 205
10.6 使用異常的注意事項 206
10.7 綜合實例 206
10.8 小結 208
第11章 宏與預編譯 209
11.1 預處理器和編譯器 209
11.2 預處理器的任務 210
11.2.1 包含檔案 210
11.2.2 搜尋頭檔案 210
11.2.3 展開宏 211
11.3 宏的作用 212
11.3.1 替代字面常量 212
11.3.2 替代運算符 213
11.3.3 聲明已定義符號 214
11.3.4 預定義的宏 214
11.4 帶參數的宏 215
11.4.1 定義帶參數的宏 216
11.4.2 注意宏展開的結果 217
11.4.3 帶參數的宏與函式的異同 218
11.4.4 特殊的宏符號 219
11.5 宏指令和預定義的宏 219
11.5.1 宏指令 219
11.5.2 利用預定義的宏指令進行有條件編譯 220
11.5.3 檔案包含命令和包含警衛 221
11.6 綜合實例 223
11.7 小結 224
第2部分 面向對象編程 225
第12章 面向對象基礎 226
12.1 對象與類詳解 226
12.1.1 什麼是對象 226
12.1.2 什麼是類 227
12.2 對象的特徵 228
12.2.1 封裝性 228
12.2.2 繼承性 229
12.2.3 多態性 230
12.3 面向過程與面向對象詳解 230
12.3.1 面向過程 230
12.3.2 面向對象 231
12.4 面向對象的分析(OOA) 232
12.4.1 對問題領域進行建模 232
12.4.2 OOA的基本原則 233
12.4.3 OOA的基本步驟 234
12.5 面向對象的設計(OOD) 235
12.5.1 OOD要解決的問題 235
12.5.2 OOD的一些基本原則 235
12.5.3 OOD的基本步驟 236
12.6 綜合實例 237
12.7 小結 238
第13章 類的封裝 239
13.1 定義類 239
13.1.1 聲明一個類 239
13.1.2 類的數據成員 240
13.1.3 類的成員函式 241
13.1.4 類的組織結構 242
13.1.5 分離成員函式的定義與實現 242
13.2 類對象 244
13.2.1 定義類對象 244
13.2.2 訪問類對象成員 245
13.2.3 隱含的this指針 246
13.3 類成員的訪問限制 248
13.3.1 一般訪問限制 248
13.3.2 私有與安全性 249
13.3.3 友元 249
13.4 類的構造函式 251
13.4.1 構造函式的定義 252
13.4.2 構造函式的重載 252
13.4.3 默認構造函式 253
13.4.4 複製構造函式 254
13.4.5 構造函式初始化列表 255
13.5 類的析構函式 257
13.5.1 析構函式的定義 257
13.5.2 默認析構函式 258
13.6 類的static成員 259
13.6.1 定義static成員 260
13.6.2 使用static成員 260
13.7 綜合實例 261
13.7.1 人的活動 261
13.7.2 自定義字元串類 262
13.8 小結 264
第14章 重載操作符和自定義轉換 265
14.1 重載操作符的定義和使用 265
14.1.1 重載操作符的定義格式 265
14.1.2 可重載的操作符 266
14.1.3 使用重載操作符 266
14.1.4 類成員和全局操作符 267
14.1.5 操作符重載和友元的關係 268
14.2 輸出和輸入操作符的重載 269
14.2.1 輸出操作符<<的重載 270
14.2.2 輸入操作符>>的重載 271
14.3 賦值操作符 273
14.3.1 類的賦值操作 273
14.3.2 淺複製與深複製 274
14.3.3 重載賦值操作符 275
14.4 算術和關係操作符的重載 276
14.4.1 算術操作符的重載 277
14.4.2 相等操作符的重載 277
14.4.3 關係操作符的重載 278
14.5 其他操作符的重載 278
14.5.1 下標操作符的重載 278
14.5.2 成員訪問操作符的重載 278
14.5.3 括弧操作符的重載 279
14.6 自定義轉換 280
14.6.1 構造函式轉換 280
14.6.2 操作符轉換 280
14.7 綜合實例 281
14.8 小結 284
第15章 類的繼承 285
15.1 確定類的層次 285
15.2 繼承的類型 286
15.2.1 公有繼承 286
15.2.2 私有繼承 288
15.2.3 保護繼承 289
15.3 選擇繼承方式 290
15.4 派生類對象的記憶體布局 292
15.5 將派生類對象轉換為基類對象 293
15.6 派生類的構造和析構 294
15.6.1 構造派生類 294
15.6.2 析構派生類 296
15.7 使用基類成員 299
15.8 基類類型的指針和引用 300
15.9 綜合實例 303
15.10 小結 305
第16章 多繼承和虛擬繼承 306
16.1 為什麼要用多繼承 306
16.2 定義多繼承 307
16.3 多繼承派生類對象的記憶體布局 308
16.4 訪問基類成員 309
16.5 多繼承存在的問題 311
16.6 虛擬繼承 312
16.6.1 虛擬繼承的語法 313
16.6.2 虛擬繼承對象的記憶體布局 313
16.6.3 虛擬繼承中的構造 316
16.7 虛擬繼承的缺點 317
16.8 綜合實例 318
16.8.1 改進水陸兩棲坦克類 318
16.8.2 改進鴨嘴獸類 319
16.9 小結 321
第17章 多態 322
17.1 什麼是多態 322
17.2 函式、模板和宏的多態性 322
17.3 動態多態 324
17.3.1 為什麼要用動態多態 324
17.3.2 如何實現動態多態 325
17.3.3 用動態多態改進圖形繪製程式 327
17.3.4 動態多態實例——計算不同職員的薪水 328
17.4 虛函式與模板方法 331
17.5 純虛函式與抽象類 332
17.5.1 純虛函式 332
17.5.2 什麼時候用純虛函式 333
17.5.3 從抽象類派生具體類 333
17.5.4 僅有純虛函式的類——接口 334
17.5.5 圖形類的接口 335
17.6 虛函式與動態綁定 337
17.6.1 如何實現動態綁定 337
17.6.2 虛函式的靜態調用 338
17.6.3 虛函式的代價 338
17.7 虛擬析構函式 339
17.8 虛函式的默認實參 340
17.9 綜合實例 341
17.10 小結 343
第18章 類模板 344
18.1 什麼是類模板 344
18.2 定義類模板 345
18.2.1 語法 345
18.2.2 非類型參數 347
18.2.3 模板參數的默認實參 348
18.3 生成類模板的實例 348
18.3.1 類型參數的模板實例化 349
18.3.2 非類型參數的模板實例化 349
18.3.3 類模板範例 350
18.4 類模板的靜態成員 352
18.5 類模板的友元 355
18.6 類模板的特化 356
18.6.1 類模板的全特化 357
18.6.2 類模板的偏特化 358
18.6.3 類模板的匹配規則 359
18.7 綜合實例 361
18.8 小結 364
第19章 檔案流 365
19.1 檔案處理的整個過程 365
19.2 處理檔案流的類 367
19.3 打開檔案 370
19.3.1 打開檔案的函式 370
19.3.2 打開檔案的方式 373
19.4 操作檔案 375
19.4.1 格式化讀寫 375
19.4.2 無格式讀數據 377
19.4.3 無格式寫數據 378
19.5 判斷檔案流狀態 379
19.5.1 檢查檔案是否打開 379
19.5.2 檔案流的狀態 379
19.6 重定位讀寫位置 381
19.7 關閉檔案 382
19.8 綜合實例 383
19.8.1 模擬生成電子郵件 383
19.8.2 模擬讀電子郵件 385
19.9 小結 386
第3部分 標準模板庫 387
第20章 使用標準模板庫STL 388
20.1 STL的形成 388
20.1.1 STL的歷史 388
20.1.2 STL的各種版本 389
20.2 STL的組成部分 390
20.3 容器的分類 392
20.4 容器的常用方法 394
20.4.1 初始化容器 394
20.4.2 增加元素 395
20.4.3 刪除元素 396
20.4.4 查找元素 397
20.4.5 修改元素 398
20.4.6 統計容器數據 398
20.4.7 其他方法 399
20.5 配置器 401
20.6 疊代器 402
20.6.1 疊代器思想 402
20.6.2 疊代器分類 403
20.6.3 定義疊代器變數 405
20.6.4 疊代器的基本用法 406
20.6.5 使用疊代器區間 409
20.6.6 疊代器的有效性 411
20.7 適配器 411
20.8 小結 413
第21章 序列式容器 414
21.1 向量vector 414
21.1.1 vector概述 414
21.1.2 構造vector 415
21.1.3 處理vector的元素 416
21.1.4 交換兩個容器的元素 417
21.1.5 使用向量的實例 418
21.2 雙向鍊表list 420
21.2.1 list概述 420
21.2.2 構造list 421
21.2.3 處理list的節點 421
21.2.4 鍊表的拼接和融合 423
21.2.5 list的反向疊代器 424
21.3 雙端佇列deque 426
21.3.1 deque概述 426
21.3.2 使用deque 427
21.4 容器適配器 429
21.5 棧stack 429
21.5.1 stack概述 429
21.5.2 使用stack 430
21.6 小結 432
第22章 關聯式容器 433
22.1 關聯式容器的存儲結構 433
22.1.1 二叉樹的概念 433
22.1.2 二叉樹的表示 434
22.1.3 二叉樹的遍歷方法 435
22.1.4 二叉搜尋樹 436
22.1.5 平衡二叉樹 437
22.1.6 關聯式容器的元素 439
22.2 映射map 440
22.2.1 定義並構造map 440
22.2.2 map容器的pair結構 441
22.2.3 使用insert插入數據 443
22.2.4 使用下標運算符[ ]插入數據 445
22.2.5 查找數據 445
22.2.6 遍歷map 447
22.2.7 刪除數據 447
22.2.8 其他操作 448
22.2.9 使用map容器管理學生名冊 449
22.3 集合set 452
22.3.1 定義並構造set 453
22.3.2 set容器的疊代器 454
22.3.3 set容器的基本操作 455
22.3.4 使用set容器管理學生名冊 456
22.4 其他關聯式容器 457
22.5 綜合實例 458
22.6 小結 460
第23章 函式對象和算法 461
23.1 函式對象概述 461
23.1.1 函式對象的定義 461
23.1.2 用函式對象替代函式指針 462
23.2 STL函式對象分類 466
23.2.1 一元函式對象 466
23.2.2 二元函式對象 467
23.2.3 算術類函式對象 468
23.2.4 關係類函式對象 468
23.2.5 邏輯類函式對象 469
23.2.6 STL函式對象的一般套用 469
23.3 函式對象適配器 469
23.3.1 可以適配的函式對象 470
23.3.2 綁定器 471
23.3.3 綁定函式 473
23.3.4 取反器 474
23.3.5 取反函式 475
23.3.6 適配器的級聯 476
23.4 算法概述 476
23.4.1 算法的特徵 477
23.4.2 算法的複雜度 477
23.4.3 算法泛化 478
23.5 STL算法詳解 479
23.5.1 疊代器參數 479
23.5.2 函式對象參數 480
23.5.3 算法分類 481
23.6 遍歷算法 482
23.7 查找算法 483
23.7.1 查找單個元素 484
23.7.2 搜尋子區間 485
23.7.3 搜尋子區間中的一個值 487
23.7.4 有序區間的查找算法 488
23.8 排序算法 489
23.8.1 sort和stable_sort 490
23.8.2 partial_sort和partial_sort_copy 490
23.9 整理算法 492
23.9.1 分類 492
23.9.2 隨機排列 493
23.9.3 顛倒 494
23.9.4 旋轉 495
23.10 小結 496
第24章 名稱空間 497
24.1 為什麼要使用名稱空間 497
24.2 創建名稱空間 499
24.2.1 創建普通名稱空間 500
24.2.2 創建嵌套名稱空間 501
24.2.3 定義名稱空間的成員 503
24.3 使用名稱空間 505
24.3.1 使用整個名稱空間 505
24.3.2 使用名稱空間中的名字 506
24.4 為名稱空間創建別名 507
24.5 匿名名稱空間 509
24.5.1 定義匿名名稱空間 509
24.5.2 匿名名稱空間與static的區別 510
24.6 標準名稱空間std 511
24.7 小結 512
第4部分 底層開發 513
第25章 位操作 514
25.1 數據的表示和編碼 514
25.1.1 數據進制 514
25.1.2 數據存儲 515
25.2 位運算 517
25.2.1 位運算簡介 517
25.2.2 按位與“&” 517
25.2.3 按位或“|” 518
25.2.4 按位異或“^” 518
25.2.5 按位取反“~” 518
25.2.6 按位左移“<<” 518
25.2.7 按位右移“>>” 519
25.2.8 位賦值運算符 519
25.3 位運算的套用 519
25.3.1 設定位 520
25.3.2 取指定位 521
25.3.3 特定位取反 522
25.4 位段的定義及套用 523
25.4.1 位段的定義 523
25.4.2 位段的套用 525
25.5 小結 525
第26章 在C++中嵌入彙編語言 526
26.1 彙編語言的基本概念 526
26.1.1 什麼是彙編語言 526
26.1.2 彙編語言的特點 526
26.1.3 彙編語言的套用領域 527
26.2 彙編語言的基本語法 528
26.2.1 通用數據傳送指令 528
26.2.2 累加器專用傳送指令 530
26.2.3 地址傳送指令 532
26.2.4 標誌暫存器傳送指令 533
26.2.5 算術指令 534
26.2.6 邏輯指令 540
26.2.7 控制轉移指令 543
26.2.8 循環控制指令 546
26.2.9 子程式調用和返回指令 546
26.3 彙編語言在C++中的套用 549
26.3.1 內聯彙編的優點 549
26.3.2 __asm語法 549
26.3.3 在__asm塊里使用彙編語言 550
26.3.4 在__asm塊中使用C/C++元素 551
26.3.5 一個例子 553
26.4 小結 557
第5部分 綜合案例 559
第27章 圖書管理系統 560
27.1 需求分析 560
27.2 系統設計 561
27.2.1 總體設計 561
27.2.2 詳細設計 562
27.2.3 資料庫設計 562
27.3 類設計 564
27.3.1 創建應用程式 564
27.3.2 設計圖書類 565
27.3.3 設計圖書庫類 567
27.3.4 設計讀者類 568
27.3.5 設計讀者庫類 569
27.4 圖書管理 571
27.4.1 查找圖書 571
27.4.2 增加圖書 572
27.4.3 維護圖書 574
27.5 讀者管理 576
27.5.1 查找讀者 576
27.5.2 增加讀者 578
27.5.3 維護讀者 579
27.6 借書模組 581
27.7 還書模組 583
27.8 系統集成 584
27.9 小結 587
第28章 學生管理系統 588
28.1 需求分析 588
28.2 總體設計 589
28.3 數據結構設計 589
28.3.1 鍊表概述 590
28.3.2 構造單鍊表 590
28.3.3 設計數據結構 591
28.4 類設計 593
28.4.1 創建應用程式 593
28.4.2 設計Student類 594
28.5 詳細設計 595
28.5.1 創建鍊表 595
28.5.2 插入節點 597
28.5.3 添加學生信息 599
28.5.4 顯示學生信息 601
28.5.5 讀入學生信息 602
28.5.6 編輯學生信息 605
28.5.7 刪除學生信息 608
28.5.8 保存學生信息 610
28.6 系統集成 611
28.6.1 設計選單 611
28.6.2 綁定選單功能 612
28.6.3 設計主函式 615
28.7 小結 615