目錄
第1篇 叩開C++世界的大門 1
第1章 C++世界地圖 3
1.1 C++是什麼 3
1.2 C++的前世今生 3
1.2.1 從B到C 4
1.2.2 從C到C++ 4
1.2.3 從C++到.NET Framework的CLI 6
1.2.4 最新標準C++0x讓C++重新煥發活力 8
1.2.5 C++和C#不得不說的那點事兒 8
1.2.6 C++世界的五大子語言 9
1.3 C++世界版圖 10
1.3.1 Windows係統下的C++開發 10
1.3.2 Linux係統下的C++開發 11
1.3.3 嵌入式係統下的C++開發 11
1.4 如何學好C++ 12
1.4.1 將自然語言轉換為C++程序設計語言 12
1.4.2 “多讀多寫”是學好C++的不二法門 14
1.4.3 和Google做朋友 14
第2章 與C++第一次親密接觸 17
2.1 一個C++程序的自白 17
2.1.1 用Visual Studio創建C++程序 17
2.1.2 以手工方式創建C++程序 20
2.1.3 C++程序=預編譯指令+程序代碼+注釋 21
2.1.4 編譯器和鏈接器 25
2.1.5 C++程序的執行過程 26
2.1.6 程序的兩大任務:描述數據與處理數據 27
2.2 基本輸入/輸齣流 28
2.2.1 標準的輸入和輸齣對象 29
2.2.2 輸齣格式控製 31
2.2.3 讀/寫文件 32
2.3 最常用的開發環境Visual Studio 34
2.3.1 Visual C++的常用菜單 35
2.3.2 Visual C++的常用視圖 44
2.4 C++世界旅行必備的物品 46
2.4.1 編程助手Visual Assist 46
2.4.2 代碼配置管理工具Visual Source Safe 48
2.4.3 CodeProject和CodeGuru 48
2.4.4 C++百科全書MSDN 48
第2篇 歡迎來到C++世界 51
第3章 C++世界眾生相 53
3.1 C++中的數據類型 53
3.2 變量和常量 54
3.2.1 聲明變量 55
3.2.2 給變量取個好名字 55
3.2.3 變量初始化 57
3.2.4 常量 57
3.2.5 用宏與const關鍵字定義常量 59
3.3 數值類型 62
3.3.1 整型數值類型 62
3.3.2 浮點型數值類型 63
3.4 布爾類型 64
3.5 字符串類型 65
3.5.1 字符類型 65
3.5.2 字符串類型 66
3.6 數組 67
3.6.1 數組的聲明與初始化 68
3.6.2 數組的使用 69
3.7 枚舉類型 71
3.8 用結構體類型描述復雜的事物 73
3.8.1 結構體的定義 73
3.8.2 結構體的使用 74
3.9 指嚮內存位置的指針 76
3.9.1 指針就是錶示內存地址的數據類型 76
3.9.2 指針變量的定義 77
3.9.3 指針的賦值和使用 78
第4章 將語句編織成程序 81
4.1 用運算符對數據進行運算 81
4.1.1 用錶達式錶達設計意圖 82
4.1.2 算術運算符 82
4.1.3 賦值操作符 84
4.1.4 關係運算符 84
4.1.5 邏輯運算符 86
4.1.6 運算符之間的優先順序 87
4.1.7 將錶達式組織成語句 89
4.2 條件選擇語句 90
4.2.1 if語句 90
4.2.2 並列選擇的switch語句 93
4.3 循環控製語句 97
4.3.1 while循環 97
4.3.2 do…while循環 99
4.3.3 for循環 100
4.3.4 循環控製:break和continue 102
4.4 從語句到程序 104
4.4.1 程序是控製語句串聯起來的語句 104
4.4.2 豪華工資統計程序 106
第5章 用函數封裝程序功能 109
5.1 函數就是一個大“箱子” 109
5.1.1 函數的聲明和定義 110
5.1.2 函數調用機製 113
5.1.3 函數的聲明與函數調用 117
5.1.4 函數參數的傳遞 119
5.1.5 函數的返迴值 121
5.2 內聯函數 123
5.2.1 用體積換速度的內聯函數 123
5.2.2 內聯函數的使用規則 124
5.3 重載函數 125
5.3.1 重載函數的聲明 125
5.3.2 重載函數的解析 128
5.4 函數設計的基本規則 129
5.4.1 函數聲明的設計規則 129
5.4.2 函數體的設計規則 131
第6章 當C++愛上麵嚮對象 135
6.1 從結構化設計到麵嚮對象程序設計 135
6.1.1 “自頂嚮下,逐步求精”的結構化程序設計 136
6.1.2 麵嚮對象程序設計 137
6.1.3 麵嚮對象的三座基石:封裝、繼承與多態 138
6.2 類:當C++愛上麵嚮對象 142
6.2.1 類的聲明和定義 142
6.2.2 使用類創建對象 146
6.2.3 構造函數和析構函數 148
6.2.4 拷貝構造函數 152
6.2.5 操作符重載 155
6.2.6 類成員的訪問控製 157
6.2.7 在友元中訪問類的隱藏信息 160
6.3 類如何麵嚮對象 162
6.3.1 用類機製實現封裝 163
6.3.2 用基類和派生類實現繼承 164
6.3.3 用虛函數實現多態 171
6.4 實戰麵嚮對象:工資管理係統 175
6.4.1 從問題描述中發現對象 175
6.4.2 分析對象的屬性和行為 176
6.4.3 實現類的屬性和行為 177
6.5 高手是這樣煉成的 183
6.5.1 C++類對象的內存模型 183
6.5.2 指嚮自身的this指針 185
第7章 C++世界的奇人異事 189
7.1 一切指針都是紙老虎:徹底理解指針 189
7.1.1 指針的運算 189
7.1.2 靈活的void類型和void類型指針 192
7.1.3 指嚮指針的指針 194
7.1.4 指針在函數中的應用 195
7.1.5 引用 198
7.2 程序中的異常處理 203
7.2.1 異常處理 203
7.2.2 異常的函數接口聲明 206
7.2.3 閤理使用異常處理 207
7.3 編寫更復雜的C++程序 208
7.3.1 源文件和頭文件 208
7.3.2 名字空間 210
7.3.3 作用域與可見性 214
7.3.4 編譯預處理 218
7.4 高手是這樣煉成的 220
7.4.1 用宏定義化繁為簡 220
7.4.2 用typedef定義類型的彆名 221
7.4.3 用const保護數據 223
第3篇 攀登C++世界的高峰 227
第8章 用STL優雅你的程序 229
8.1 跟STL做朋友 230
8.1.1 算法 + 容器 + 迭代器 = STL 230
8.1.2 在程序中使用STL 231
8.1.3 STL到底好在哪裏 233
8.2 用模闆實現通用算法 234
8.2.1 函數模闆 235
8.2.2 類模闆 238
8.2.3 模闆的實例化 240
8.2.4 用模闆實現通用算法 241
第9章 STL中的容器管理數據 245
9.1 容器就是STL中的瓶瓶罐罐 245
9.1.1 操作容器中的數據元素 247
9.1.2 使用迭代器訪問容器中的數據元素 247
9.1.3 容器的使用說明書 249
9.1.4 如何選擇閤適的容器 252
9.2 vector容器是數組的最佳替代者 253
9.2.1 創建並初始化vector對象 253
9.2.2 vector容器的操作 256
9.2.3 訪問vector容器中的數據 257
9.3 可以保存鍵值對的map容器 258
9.3.1 創建並初始化map容器 258
9.3.2 將數據保存到map容器中 259
9.3.3 根據鍵找到對應的值 260
第10章 用STL中的通用算法處理數據 263
10.1 STL算法中的“四大幫派” 263
10.2 容器元素的查找與遍曆 264
10.2.1 用for_each()算法遍曆容器中的數據元素 264
10.2.2 用find()和find_if()算法實現綫性查找 266
10.3 容器元素的復製與變換 270
10.3.1 復製容器元素:copy()算法 270
10.3.2 閤並容器元素:merge()算法 272
10.3.3 變換容器元素:transform函數 274
10.4 容器元素的排序 276
10.4.1 使用sort()算法對容器中的數據進行排序 276
10.4.2 對排序的規則進行自定義 279
10.5 實戰STL算法 282
10.5.1 “算法”老師帶來的一堂彆開生麵的體育課 282
10.5.2 刪除容器中的冗餘元素 284
第11章 函數指針、函數對象與Lambda錶達式 287
11.1 函數指針 287
11.1.1 函數指針的聲明與賦值 287
11.1.2 用函數指針調用函數 289
11.1.3 用函數指針實現迴調函數 291
11.1.4 將函數指針應用到STL算法中 293
11.2 函數對象 295
11.2.1 定義一個函數對象 295
11.2.2 利用函數對象記住狀態數據 297
11.3 用Lambda錶達式編寫更簡單的函數 299
11.3.1 最簡單直接的函數錶達形式:Lambda錶達式 299
11.3.2 Lambda錶達式的語法規則 301
11.3.3 Lambda錶達式的復用 302
第12章 C++世界的幾件新鮮事 305
12.1 用右值引用榨乾C++的性能 305
12.1.1 什麼是右值 305
12.1.2 右值引用在函數返迴值上的應用 306
12.1.3 STL算法中被浪費的右值 307
12.1.4 右值引用如何提高性能 310
12.2 智能指針shared_ptr 312
12.2.1 C++的內存管理 312
12.2.2 用聰明的shared_ptr解決內存管理問題 313
12.2.3 智能指針的應用場景 315
12.2.4 shared_ptr的使用 316
12.2.5 shared_ptr與標準庫容器 321
12.2.6 對shared_ptr進行自定義 323
12.3 用PPL進行多綫程開發 326
12.3.1 多核給程序設計帶來的挑戰 326
12.3.2 PPL帶來免費的午餐 327
12.3.3 PPL中的並行算法 329
12.3.4 PPL中的並行任務 331
12.3.5 PPL中的並行對象和並行容器 334
12.3.6 PPL之外的另一種選擇:OpenMP 340
第13章 找工作就靠它瞭 343
13.1 打好基礎 343
13.1.1 基本概念 343
13.1.2 函數 346
13.1.3 麵嚮對象思想 348
13.1.4 類與對象 349
13.1.5 STL 360
13.2 積纍經驗 362
13.3 考查智力 364
附錄A 接下來該讀什麼書 367
A.1 開山鼻祖:《C++程序設計語言》 367
A.2 初學者必看:《C++ Primer中文版(第4版)》 368
A.3 百科全書:《代碼大全,第2版》 368
A.4 內功秘籍:《Effective C++(Third Edition)》 370
A.5 經驗很重要:《C++編程規範》 370
後記 373
· · · · · · (
收起)