C++ 開發從入門到精通

C++ 開發從入門到精通
定價:414
NT $ 360
 

內容簡介

本書由淺入深地講解了C++的開發技術,並通過具體實例的實現過程演練了各個知識點的具體應用。全書共26章,其中第1~2章講解了C++技術的基礎知識,包括C++的重要特性和搭建開發環境;第3~7章分別講解了C++語法、變量、常量、流程控制、運算符和表達式等知識,這些內容都是C++開發技術的核心知識;第8~11章分別講解了輸入、輸出、函數、指針和復合類型的基本知識,包含了C++開發技術的重點和難點;第12~21章講解了面向對象、類、繼承、派生、多態、內存管理和異常處理等內容;第22~26章通過5個綜合實例的實現過程,介紹了C++技術在綜合項目中的開發流程。全書內容循序漸進,以「范例演練」和「技術解惑」貫穿全書,引領讀者全面掌握C++語言開發。

南京航天大學通信工程碩士,計算機工程碩士,傑出C++開發工程師和架構師,並且精通Linux底層嵌入式開發技術,曾經從底層硬件到頂層應用獨立的開發過一款通信產品。業余期間,曾經在國內主流期刊中發表過多篇通信領域的傑出論文。業余時間樂於技術分享。
 

目錄

第1章 說真的,我們還要學習C++嗎 1
(視頻總計29分鍾,實例1個,拓展實例2個,技術解惑2個)
1.1 C++概述 2
1.2 開發工具—Visual C++ 2
1.2.1 先看Visual C++的基本特點 2
1.2.2 安裝Visual C++ 3
1.2.3 Visual C++集成開發環境介紹 5
1.3 使用Visual Studio 2010 20
1.4 第一個C++程序 22
1.5 技術解惑 25
1.5.1 初學者經常不知道自己該學什麼 25
1.5.2 初學者需要知道的正確觀念 25

第2章 C++的重要特質分析 26
(視頻總計27分鍾,實例1個,拓展實例2個,技術解惑3個)
2.1 什麼是面向對象
(object-oriented) 27
2.1.1 什麼是OOP 27
2.1.2 面向對象編程 27
2.2 分析C++的程序結構 27
2.2.1 從一段代碼看C++程序結構 28
2.2.2 看C++的文件組織 29
2.3 必須遵循的編碼規范 30
2.3.1 養成良好的風格 30
2.3.2 必須使用的注釋 30
2.3.3 代碼也需要化妝 31
2.4 輸入輸出基礎 33
2.4.1 標准輸入與輸出對象 33
2.4.2 一個使用IO庫的程序 33
2.5 算法是程序的靈魂 35
2.5.1 算法的概念 35
2.5.2 流程圖表示算法 36
2.5.3 計算機語言表示算法 38
2.6 技術解惑 38
2.6.1 C++是面向對象,C是面向過程,那麼這個對象和過程是什麼意思呢 38
2.6.2 面向對象和面向過程的區別 38
2.6.3 學好C++的建議 39

第3章 你不一定了解的基礎語法 40
(視頻總計19分鍾,實例1個,拓展實例2個,技術解惑5個)
3.1 先看標識符 41
3.1.1 C++中的保留字 41
3.1.2 需要遵循的命名規則 41
3.2 最基本的數據類型 43
3.2.1 數字運算型 43
3.2.2 邏輯運算型 46
3.2.3 字符型和字符串 46
3.3 標准類型庫基礎 47
3.3.1 命名空間using聲明 48
3.3.2 標准庫的string類 48
3.3.3 vector類型簡介 52
3.3.4 迭代器簡介 55
3.3.5 bitset類型初步 57
3.4 技術解惑 60
3.4.1 C++的標識符長度應當符合「min-length &&
max-information」原則 60
3.4.2 字符和字符串有什麼區別 60
3.4.3 C++中string類字符串和C中char/char[]型字符串的差別 60
3.4.4 C++字符串和C字符串的轉換 61
3.4.5 C++字符串和字符串結束標志 61

第4章 你不一定了解的變量和常量 62
(視頻總計29分鍾,實例8個,拓展實例16個,技術解惑6個)
4.1 先來看變量 63
4.1.1 定義變量 63
4.1.2 聲明變量 63
4.2 變量的作用域 64
4.2.1 作用域和生存期 64
4.2.2 作用域限定符 66
4.2.3 存儲類型 67
4.2.4 C++變量初始化 68
4.2.5 C++變量命名規范 69
4.3 再來看常量 70
4.3.1 什麼是常量 70
4.3.2 常量的分類 70
4.3.3 常量的應用 73
4.4 技術解惑 74
4.4.1 C++常量的命名需要遵循一定的規范嗎 74
4.4.2 在C++程序中,用const定義常量還是用#define 74
4.4.3 const是個很重要的關鍵字,在使用時應該注意些什麼呢 74
4.4.4 關於全局變量的初始化,C語言和C++有區別嗎 75
4.4.5 C/C++變量在內存中的分布 75
4.4.6 靜態變量的初始化順序 75

第5章 你不一定了解的運算符 76
(視頻總計29分鍾,實例8個,拓展實例16個,技術解惑4個)
5.1 先看賦值運算符 77
5.2 再看算術運算符 78
5.3 再看比較運算符 79
5.4 再看邏輯運算符 80
5.5 單獨看++/??運算符 81
5.6 再看位運算符 82
5.7 再看求字節數運算符 85
5.8 再看條件運算符 86
5.9 再看逗號運算符 86
5.10 技術解惑 88
5.10.1 避免運算結果溢出的一個方案 88
5.10.2 運算符重載的權衡 88
5.10.3 運算符的優先級和結合性 88
5.10.4 運算符重載是對已有運算符賦予多重含義 90

第6章 說說表達式 91
(視頻總計19分鍾,實例4個,拓展實例8個,技術解惑2個)
6.1 何謂表達式 92
6.1.1 看天下幾分—表達式的分類 92
6.1.2 看表達式的書寫方式 92
6.2 說說類型轉換 92
6.2.1 先看隱式轉換 93
6.2.2 再看顯式轉換 94
6.3 技術解惑 98
6.3.1 C/C++ 表達式的限制 98
6.3.2 表達式的真正功能 98

第7章 流程控制語句 99
(視頻總計42分鍾,實例13個,拓展實例26個,技術解惑6個)
7.1 最簡單的語句和語句塊 100
7.1.1 最簡單的語句 100
7.1.2 說說語句塊 100
7.1.3 最后是語句的總結 102
7.2 最常見的順序結構 103
7.3 選擇結構 104
7.3.1 先看單分支結構語句 104
7.3.2 再看雙分支結構語句 105
7.3.3 還要使用多分支結構語句 108
7.4 循環結構詳解 110
7.4.1 for語句循環 111
7.4.2 while語句 113
7.4.3 說說do-while語句 114
7.5 跳轉語句 115
7.5.1 何謂break語句 115
7.5.2 何謂continue語句 116
7.5.3 何謂goto語句 116
7.6 技術解惑 117
7.6.1 循環中斷的問題 117
7.6.2 分析循環語句的效率 117
7.6.3 幾種循環語句的比較 118
7.6.4 C++中,for循環該怎麼讀 118
7.6.5 一個C++循環結構嵌套的問題 118
7.6.6 break語句和continue語句的區別 119

第8章 學習C++的最大障礙—指針 120
(視頻總計42分鍾,實例12個,拓展實例24個,技術解惑7個)
8.1 說說指針的基本概念 121
8.2 定義指針的幾種方式 121
8.2.1 先定義指針 121
8.2.2 再識別指針 122
8.3 指針的分類 123
8.4 指針初始化 123
8.4.1 第一步:指針地址初始化 124
8.4.2 第二步:變量地址初始化 124
8.4.3 第三步:new分配內存單元 125
8.4.4 第四步:malloc函數分配內存單元 125
8.5 指針運算 126
8.5.1 算數運算 126
8.5.2 關系運算 128
8.6 指針的指針 130
8.7 使用指針 130
8.7.1 指針賦值 131
8.7.2 *操作符 131
8.8 分析指針和引用的關系 132
8.9 特殊指針 135
8.9.1 先看void型指針 135
8.9.2 再看空指針 136
8.10 技術解惑 137
8.10.1 指針的命名規范 137
8.10.2 C++中指針和引用的區別 138
8.10.3 變量在語言中的實質 139
8.10.4 C++開發如何避免和解決野指針 139
8.10.5 常量指針常量和常量引用常量 141
8.10.6 指針常量和引用常量的對比 141
8.10.7 常量指針和常量引用的對比 141

第9章 復合類型 142
(視頻總計57分鍾,實例23個,拓展實例46個,技術解惑7個)
9.1 數組基礎 143
9.1.1 先定義數組 143
9.1.2 再看高級數組 143
9.1.3 分析數組的完整性 144
9.1.4 看維數不全 144
9.1.5 看無維數 144
9.2 動態數組 145
9.2.1 在堆上分配空間的動態數組 145
9.2.2 在棧上分配空間的「假動態」數組 146
9.3 數組存儲 148
9.3.1 列存儲 148
9.3.2 行存儲 148
9.4 字符數組 149
9.4.1 定義字符數組 149
9.4.2 字符數組和字符串指針變量 150
9.5 數組初始化 151
9.5.1 先看定義時的初始化 151
9.5.2 初始化賦值語句 151
9.6 指針和數組 152
9.6.1 指向數組的指針 153
9.6.2 指針數組 154
9.7 使用數組 155
9.7.1 索引方式 155
9.7.2 指針方式 156
9.8 枚舉 157
9.8.1 枚舉基礎 157
9.8.2 使用枚舉 159
9.9 結構體 161
9.9.1 指向結構的指針 162
9.9.2 使用結構體 162
9.10 聯合 163
9.11 自定義類型 164
9.11.1 先看typedef的作用 165
9.11.2 再看typedef的使用 166
9.12 技術解惑 166
9.12.1 字符數組和字符串的區別 166
9.12.2 字符數組和字符串可以相互轉換 167
9.12.3 靜態數組的速度快於動態數組 167
9.12.4 Arrays與Vector的區別 167
9.12.5 一道關於數組的面試題 168
9.12.6 數組名不是指針 169
9.12.7 作為一個用戶自定義的類型,其所占用的內存空間是多少呢 170

第10章 函數 171
(視頻總計47分鍾,實例16個,拓展實例32個,技術解惑8個)
10.1 C++函數基礎 172
10.1.1 先看定義方式 172
10.1.2 函數分類 172
10.1.3 函數定義實例 177
10.2 函數的參數 179
10.2.1 何謂形參實參 179
10.2.2 使用數組做函數參數 180
10.3 返回值和返回語句 181
10.4 調用函數 182
10.4.1 單獨調用 182
10.4.2 函數表達式 183
10.4.3 實參調用 183
10.4.4 參數傳遞 184
10.5 函數遞歸 185
10.6 指向函數的指針 186
10.7 將函數作為參數 187
10.8 變量的作用域和生存期 188
10.8.1 變量作用域 189
10.8.2 靜態存儲變量和動態存儲變量 190
10.9 函數main()和命令行處理 192
10.10 技術解惑 193
10.10.1 用typedef來定義一個函數指針類型 193
10.10.2 const關鍵字在函數中的作用 194
10.10.3 C++函數的內存分配機制 194
10.10.4 主函數和子函數的關系 195
10.10.5 函數聲明和函數定義的區別 195
10.10.6 使用全局變量的注意事項 195
10.10.7 使用寄存器變量的注意事項 196
10.10.8 自動變量的特點 196

第11章 輸入和輸出 197
(視頻總計49分鍾,實例12個,拓展實例24個,技術解惑5個)
11.1 iostream對象 198
11.1.1 標准的I/O接口 198
11.1.2 文件I/O 200
11.1.3 字符串I/O 201
11.2 輸出 202
11.2.1 預定義類型輸出 202
11.2.2 自定義類型輸出 203
11.3 輸入 204
11.3.1 預定義類型輸入 204
11.3.2 自定義類型輸入 205
11.4 輸入/輸出格式化 206
11.4.1 使用ios類成員函數 206
11.4.2 使用操縱函數 207
11.5 文件 209
11.5.1 打開和關閉 209
11.5.2 順序讀寫 210
11.5.3 隨機讀寫 212
11.5.4 二進制文件 213
11.5.5 檢測EOF 213
11.6 技術解惑 215
11.6.1 輸入/輸出時數的進制問題 215
11.6.2 數據間隔 216
11.6.3 內存文件映射 216
11.6.4 get和put的值的差異 217
11.6.5 使用控制符控制輸出格式 217

第12章 類和封裝 218
(視頻總計37分鍾,實例9個,拓展實例18個,技術解惑3個)
12.1 類 219
12.1.1 先聲明類 219
12.1.2 再看類的屬性 220
12.1.3 再看類的方法 220
12.1.4 再看構造函數 221
12.1.5 再看析構函數 224
12.1.6 再看靜態成員 225
12.1.7 友元 226
12.1.8 再看修飾符 228
12.1.9 指向類成員的指針 228
12.1.10 嵌套類 229
12.1.11 類文件的組織 230
12.2 對象 232
12.2.1 先定義對象 232
12.2.2 再使用對象 233
12.2.3 再看this指針 234
12.3 技術解惑 236
12.3.1 淺拷貝和深拷貝 236
12.3.2 構造函數的錯誤認識和正確認識 237
12.3.3 保護性析構函數的作用 237

第13章 命名空間和作用域 239
(視頻總計23分鍾,實例3個,拓展實例6個,技術解惑4個)
13.1 命名空間介紹 240
13.2 定義命名空間 240
13.3 使用命名空間 243
13.3.1 使用域限定符 243
13.3.2 使用using指令 243
13.3.3 using聲明 244
13.3.4 別名 245
13.4 作用域 245
13.4.1 什麼是作用域 246
13.4.2 作用域的分類 247
13.5 技術解惑 249
13.5.1 using指令與using聲明的比較 249
13.5.2 為什麼需要命名空間 249
13.5.3 命名空間的作用 250
13.5.4 在C++中使用這些頭文件的方法 250
第14章 類的繼承和派生 252
(視頻總計37分鍾,實例7個,拓展實例14個,技術解惑5個)
14.1 繼承與派生的基本概念 253
14.2 C++繼承機制 253
14.3 繼承和派生的基本知識 255
14.3.1 單重繼承、多重繼承與繼承鏈 255
14.3.2 公有派生和私有派生 256
14.3.3 保護成員與保護派生 256
14.3.4 友元類和友元函數 257
14.4 派生一個類 257
14.4.1 先看基類的使用狀況 257
14.4.2 派生的使用狀況 258
14.4.3 再看構造函數 260
14.4.4 再看析構函數 262
14.4.5 使用同名方法 263
14.4.6 使用同名屬性 265
14.5 單重繼承和多重繼承 266
14.5.1 單重繼承 266
14.5.2 多重繼承 266
14.5.3 構造函數和析構函數 267
14.6 虛繼承和虛基類 269
14.7 技術解惑 271
14.7.1 通過虛繼承解決二義性問題 271
14.7.2 使用C++虛基類的注意事項 272
14.7.3 一個問題 273
14.7.4 多重繼承的二義性 273
14.7.5 允許派生類中的成員名和基類中的成員名相同 275

第15章 多態性詳解 276
(視頻總計39分鍾,實例11個,拓展實例22個,技術解惑6個)
15.1 基本概念 277
15.2 先看宏多態 279
15.3 虛函數 280
15.3.1 虛函數基礎 280
15.3.2 靜態綁定和動態綁定 281
15.3.3 純虛函數 282
15.4 抽象類 283
15.4.1 什麼是抽象類 283
15.4.2 抽象類的派生 284
15.5 運算符重載 285
15.5.1 運算符重載基礎 285
15.5.2 重載一元運算符 286
15.5.3 重載二元運算符 287
15.6 函數重載 288
15.6.1 函數重載基礎 288
15.6.2 參數類型不同的重載 289
15.7 流的重載 290
15.7.1 流插入重載 290
15.7.2 流提取重載 291
15.8 覆蓋 293
15.8.1 覆蓋函數 293
15.8.2 覆蓋變量 294
15.9 技術解惑 295
15.9.1 重載、覆蓋和隱藏的區別 295
15.9.2 在重載運算符的時候要權衡實施的必要性 296
15.9.3 為什麼需要函數重載 296
15.9.4 重載函數的調用匹配 297
15.9.5 另一種虛方法查找方案 298
15.9.6 兩種重載方法的比較 298

第16章 模板的威力 299
(視頻總計27分鍾,實例3個,拓展實例6個,技術解惑4個)
16.1 基本概念 300
16.2 類模板 301
16.2.1 定義類模板 301
16.2.2 使用類模板 302
16.2.3 類模板的派生 304
16.2.4 類模板和模板類的
區別 304
16.3 函數模板 305
16.3.1 定義函數模板 305
16.3.2 函數模板示例 306
16.3.3 模板實例化 306
16.4 模板組合 307
16.5 技術解惑 308
16.5.1 在函數模板中使用多個類型參數時要避免類型參數的二義性 308
16.5.2 函數模板和模板函數的區別 308
16.5.3 函數模板和類模板的區別 309
16.5.4 仿函數的用處 309

第17章 進一步剖析string類 310
(視頻總計19分鍾,實例3個,拓展實例6個,技術解惑3個)
17.1 string類的方法 311
17.2 string類的運算 313
17.2.1 查找函數 313
17.2.2 替換函數 314
17.2.3 插入函數 314
17.2.4 刪除函數 314
17.2.5 比較函數 315
17.2.6 連接函數 315
17.2.7 賦值函數 315
17.2.8 特性描述函數 316
17.2.9 構造函數 316
17.2.10 迭代器處理 316
17.2.11 其他幾種處理函數 316
17.3 string類綜合應用 317
17.3.1 頭文件123.h 318
17.3.2 類實現文件yinyong.cpp 318
17.3.3 測試使用主文件zonghe.cpp 320
17.4 技術解惑 320
17.4.1 C++字符串和C字符串的轉換 320
17.4.2 大小和容量函數 321
17.4.3 cstring類與string類的比較 321

第18章 異常處理 323
(視頻總計19分鍾,實例5個,拓展實例10個,技術解惑13個)
18.1 什麼是異常處理 324
18.2 C++的異常處理機制 324
18.2.1 throw拋出異常 326
18.2.2 raise拋出異常 327
18.2.3 try-catch異常捕獲 328
18.3 異常處理中的構造和析構 330
18.4 C++異常處理機制總結 331
18.5 技術解惑 333
18.5.1 編寫軟件的目標 333
18.5.2 關於C++的new關鍵字的異常處理 333
18.5.3 C語言異常處理和結構化異常處理有什麼區別? 334
18.5.4 C++拋出異常不捕獲,程序的空間會釋放嗎? 334
18.5.5 throw拋出異常的特點 335
18.5.6 關於C 異常處理的心得體會 335
18.5.7 慎用catch(...) 335
18.5.8 慎用繼承體系里的類作為catch的參數 336
18.5.9 對象析構函數被調用的3種場合 336
18.5.10 不要在異常處理體系中寄希望於類型轉換 336
18.5.11 有C++異常處理體系捕獲不到的東西嗎? 337
18.5.12 set_unexpected函數的用處 337
18.5.13 不要讓異常逃離析構函數 337

第19章 內存管理 338
(視頻總計19分鍾,實例5個,拓展實例10個,技術解惑3個)
19.1 內存分類 339
19.2 棧內存管理 339
19.2.1 申請棧內存 339
19.2.2 使用棧內存 340
19.2.3 釋放棧內存 342
19.2.4 改變內存大小 342
19.3 堆內存管理 343
19.3.1 申請堆內存 343
19.3.2 使用堆內存 343
19.3.3 釋放堆內存 344
19.3.4 改變大小 345
19.4 技術解惑 346
19.4.1 堆和棧的區別 346
19.4.2 常見的內存錯誤及其對策 347
19.4.3 防止發生溢出錯誤 348

第20章 預處理 349
(視頻總計24分鍾,實例2個,拓展實例4個,技術解惑3個)
20.1 什麼是預處理 350
20.2 C++中常見的預處理 350
20.2.1 文件包含 350
20.2.2 條件編譯 351
20.2.3 布局控制 352
20.2.4 宏替換 354
20.2.5 其他預編譯指令 355
20.3 分析宏的常見陷阱 356
20.4 技術解惑 357
20.4.1 預處理的未來 357
20.4.2 兩者的意義 358
20.4.3 一個初學者的問題 358

第21章 錯誤和調試 359
(視頻總計21分鍾,實例2個,拓展實例4個,技術解惑4個)
21.1 什麼是錯誤 360
21.1.1 Bug的由來 360
21.1.2 程序設計方面的解釋 360
21.2 常見的錯誤分析 360
21.3 程序調試常見錯誤 364
21.4 C++編程中的調試技巧 369
21.4.1 調試標記 369
21.4.2 運行期間調試標記 369
21.4.3 把變量和表達式轉換成字符串 370
21.4.4 C語言的assert() 370
21.5 技術解惑 370
21.5.1 編寫規范易懂的代碼 370
21.5.2 編寫安全可靠的代碼 371
21.5.3 Visual C++調試技術 372
21.5.4 常見的非語法錯誤 375

第22章 初入江湖—圖書借閱系統的實現過程 376
(視頻總計19分鍾)
22.1 項目要求 377
22.2 需求分析 377
22.3 系統具體實現 378
22.3.1 數據結構設計 378
22.3.2 系統主文件rent.cpp 378
22.3.3 菜單處理文件mainfunction.h 379
22.3.4 函數定義文件subfunction.h 379
22.3.5 菜單處理實現文件mainfunction.cpp 380
22.3.6 功能函數實現文件subfunction.cpp 383

第23章 開始闖關(1)—C++實現
網絡應用項目 396
(視頻總計18分鍾)
23.1 項目要求 397
23.1.1 客戶機/服務器模式介紹 397
23.1.2 客戶機/服務器模式的運作流程 398
23.2 實現原理 398
23.2.1 什麼是winsocket編程接口 398
23.2.2 winsocket中的函數 398
23.3 具體實現 403
23.3.1 客戶端和服務器端的公用文件 403
23.3.2 實現服務器端 405
23.3.3 實現客戶端 406

第24章 開始闖關(2)—C++實現游戲項目 408
(視頻總計43分鍾)
24.1 計算機游戲基礎 409
24.1.1 游戲的基本流程 409
24.1.2 游戲元素 409
24.1.3 游戲層次 410
24.2 項目分析 410
24.2.1 游戲的角色 410
24.2.2 游戲界面表現 411
24.3 具體實現 411
24.3.1 實現相關位圖 411
24.3.2 變量與函數 411
24.3.3 實現全屏 412
24.3.4 類初始化 413
24.3.5 實現具體顯示界面 413
24.3.6 信息提示 415
24.3.7 和時間段相關的操作 415
24.3.8 鍵盤操作 416
24.3.9 我方發射子彈 417
24.3.10 敵機出現 418
24.3.11 敵機發射子彈 418
24.3.12 敵機子彈移動 419
24.3.13 火力實現 419

第25章 功成名就—DirectX實現媒體播放器 421
(視頻總計37分鍾)
25.1 DirectX技術基礎 422
25.1.1 DirectX技術概述 422
25.1.2 DirectX的基本結構及組成 422
25.1.3 DirectX主要組件介紹 423
25.2 系統分析和設計 425
25.2.1 功能需求和效果展示 426
25.2.2 設計FilterGraph結構 427
25.3 實現媒體控制類 427
25.3.1 CDXGraph類初始化 427
25.3.2 創建Graph濾波器鏈表 428
25.3.3 設計圖像窗口 429
25.3.4 媒體播放控制 430
25.3.5 視頻全屏顯示 433
25.3.6 抓圖保存 433
25.4 實現播放器主題 433
25.4.1 打開一個媒體文件 433
25.4.2 渲染媒體文件 434
25.4.3 播放媒體文件 434
25.4.4 實現控制功能 435
25.4.5 實現拖放功能 438
25.4.6 實現音量調節功能 438
25.4.7 添加背景圖片 439

第26章 笑傲江湖—C++網絡視頻
監控系統 440
(視頻總計65分鍾)
26.1 系統分析 441
26.2 系統設計 441
26.3 系統預覽 441
26.4 數據庫設計 442
26.5 選購監控卡 444
26.6 具體編程實現 445
26.6.1 設計公共模塊 445
26.6.2 設計主窗體 449
26.7 設計管理員登錄模塊 460
26.8 設計監控管理模塊 462
26.8.1 監控管理技術分析 462
26.8.2 編程監控管理 463
26.8.3 單元測試處理 465
26.9 設計廣角自動監控模塊 466
26.9.1 可行性分析 466
26.9.2 編程實現 467
26.9.3 單元測試 469
26.10 設計視頻回放模塊 470
26.11 分析絢麗界面的實現方法 471
網路書店 類別 折扣 價格
  1. 新書
    87
    $360