內容簡介
c++是近年廣泛使用的程式設計語言,由c語言的基礎上發展而來,實現了由面向過程到面向對象的轉變,全面支持面向對象的程式設計方法。c++語言在軟體工業領域一直處於領先地位,並且自身在不斷完善,必將作為高性能軟體開發的基礎,在軟體開發中發揮主要的作用。
《由淺入深學c++:基礎、進階與必做300題(含dvd光碟1張)》是c++語言的入門教程,較為系統地介紹了c++語言的基礎內容。本書共分為3篇22章,詳細介紹了c++語言的基礎知識、面向對象、標準模組、底層開發和綜合案例。本書循序漸進地講述了c++的基礎知識、c++程式的組成及其開發過程、c++程式中的數據、表達式和語句、控制程式流程、數組與字元串、指針與引用、使用函式、函式模板、錯誤和異常處理、宏和預編譯、面向對象的開發、封裝、繼承、多態、類模板、檔案流、標準模板庫stl和編程實踐等內容。
《由淺入深學c++:基礎、進階與必做300題(含dvd光碟1張)》涉及面廣,從基本知識到高級內容和核心概念,再到綜合案例,幾乎涉及c++開發的所有重要知識。本書適合所有想全面學習c++開發技術的人員閱讀,尤其適合沒有編程基礎的c++語言初學者作為入門教程,也可作為大、中院校師生和培訓班的教材,對於c++語言開發愛好者,本書也有較大的參考價值。
目錄
第1篇 c++基礎篇
第1章 c++概述 1
1.1 引言 1
1.1.1 c++的歷史沿革 1
1.1.2 入門c++ 2
1.1.3 編程思想的轉變 3
1.2 c++概述 4
1.2.1 c++的特徵 5
1.2.2 c與c++的比較 5
1.2.3 c++的套用領域 6
1.3 c++源程式的組成 6
1.3.1 基本組成元素 7
1.3.2 標識符 8
1.3.3 保留字 8
1.3.4 符號 8
1.4 c++集成開發環境——dev-c++ 9
1.4.1 選擇c++編譯器 9
1.4.2 安裝dev-c++ 10
1.4.3 dev-c++ ide簡介 11
.1.5 第一個c++程式——hello world 11
1.5.1 創建源程式 11
1.5.2 編譯運行 13
1.6 小結 14
1.7 習題 14
第2章 變數與數據類型 18
2.1 常量和變數 18
2.1.1 常量 18
2.1.2 變數 21
2.1.3 變數的定義及賦值 22
2.1.4 變數的套用示例 24
2.2 基本數據類型 25
2.2.1 基本數據類型概述 25
2.2.2 整型數據類型 26
2.2.3 浮點型數據類型 27
2.2.4 字元型數據類型 29
2.2.5 布爾型數據類型 30
2.3 變數的作用域 31
2.4 類型轉換 32
2.4.1 隱式轉換 32
2.4.2 顯式轉換 33
2.5 小結 34
2.6 習題 34
第3章 表達式與語句 39
3.1 運算符 39
3.1.1 運算符概述 39
3.1.2 算術運算符 40
3.1.3 自增和自減運算符 42
3.1.4 賦值運算符 43
3.1.5 關係運算符 44
3.1.6 邏輯運算符 45
3.1.7 條件運算符 46
3.1.8 逗號運算符 47
3.1.9 位運算符 48
3.1.10 sizeof運算符 49
3.2 運算符的優先權和結合性 50
3.3 表達式 51
3.4 語句 53
3.4.1 空格的作用 53
3.4.2 語句塊 54
3.4.3 賦值語句 55
3.4.4 空語句 56
3.5 小結 57
3.6 習題 57
第4章 流程控制結構之順序結構 63
4.1 程式流程圖 63
4.2 表達式語句 64
4.3 格式化輸入/輸出 65
4.3.1 標準輸入流cin 65
4.3.2 標準輸出流cout 66
4.3.3 輸出流cerr和clog 68
4.4 格式控制函式 69
4.5 格式控制符 71
4.5.1 控制不同進制的輸出 72
4.5.2 控制輸出寬度 72
4.5.3 控制輸出精度 73
4.6 順序結構綜合套用 74
4.7 小結 75
4.8 習題 75
第5章 流程控制結構之選擇結構 80
5.1 條件 80
5.1.1 關係表達式條件 80
5.1.2 邏輯表達式條件 82
5.1.3 組合條件 83
5.2 if語句 84
5.2.1 if形式 84
5.2.2 if…else形式 85
5.2.3 if…else if…else形式 87
5.2.4 if…else語句嵌套 90
5.3 switch語句 92
5.3.1 switch語句的基本形式 92
5.3.2 套用示例 93
5.4 選擇結構的嵌套 94
5.5 選擇結構綜合套用 96
5.6 小結 99
5.7 習題 99
第6章 流程控制結構之循環結構 104
6.1 goto語句 104
6.2 while語句 106
6.2.1 while語句的基本形式 106
6.2.2 套用示例 107
6.2.3 注意事項 109
6.3 do…while語句 112
6.3.1 do…while語句的形式 112
6.3.2 套用示例 114
6.3.3 注意事項 115
6.4 for語句 116
6.4.1 for語句的形式 117
6.4.2 套用示例 118
6.4.3 注意事項 119
6.5 多重循環 120
6.6 轉向語句 122
6.6.1 break語句 122
6.6.2 continue語句 124
6.6.3 return語句 124
6.7 循環結構綜合套用 125
6.8 小結 128
6.9 習題 128
第7章 數組 137
7.1 數組概述 137
7.1.1 數組的基本概念 137
7.1.2 一維數組 138
7.1.3 二維數組 138
7.2 數組的聲明及初始化 139
7.2.1 聲明一維數組 139
7.2.2 初始化一維數組 139
7.2.3 聲明二維數組 141
7.2.4 初始化二維數組 141
7.3 引用數組元素 143
7.3.1 引用一維數組元素 143
7.3.2 引用二維數組元素 145
7.3.3 套用示例 146
7.4 字元串 147
7.4.1 字元數組 147
7.4.2 字元串 148
7.4.3 字元數組與字元串的區別 149
7.5 字元串處理函式 150
7.5.1 strcmp()函式——字元串比較 150
7.5.2 strcpy()函式——字元串複製 151
7.5.3 strcat()函式——字元串連線 152
7.5.4 strlen()函式——計算字元串長度 153
7.5.5 gets()和puts()函式——字元串輸入輸出 154
7.6 數組綜合套用 155
7.7 小結 159
7.8 習題 159
第8章 函式 166
8.1 函式概述 166
8.1.1 函式的基本概念 166
8.1.2 函式的分類 167
8.1.3 函式的組成 167
8.2 函式的聲明和定義 168
8.2.1 聲明函式 168
8.2.2 定義函式 170
8.2.3 頭檔案和實現檔案的分離 170
8.3 函式參數傳遞 174
8.3.1 形參和實參 174
8.3.2 值傳遞 174
8.3.3 地址傳遞 176
8.4 函式的調用 177
8.4.1 函式調用過程 177
8.4.2 無參函式的調用 178
8.4.3 帶參函式的調用 179
8.4.4 默認形參值的函式調用 181
8.4.5 嵌套調用 182
8.5 遞歸 184
8.5.1 直接遞歸 184
8.5.2 間接遞歸 185
8.6 main()函式 187
8.6.1 不帶參數的main()函式 187
8.6.2 帶參數的main()函式 188
8.7 內聯函式 189
8.8 函式綜合套用 191
8.9 小結 193
8.10 習題 193
第9章 函式的高級套用 201
9.1 數組作為函式參數 201
9.1.1 傳遞一維數組參數 201
9.1.2 傳遞多維數組參數 202
9.2 查找的函式實現 204
9.2.1 順序查找的函式實現 204
9.2.2 折半查找的函式實現 206
9.3 排序的函式實現 208
9.3.1 冒泡排序的函式實現 208
9.3.2 快速排序的函式實現 210
9.4 函式模板 211
9.4.1 引入函式模板 211
9.4.2 定義函式模板 212
9.4.3 實例化函式模板 213
9.4.4 套用示例 215
9.5 函式重載 216
9.5.1 函式重載概述 216
9.5.2 參數類型不同的函式重載 217
9.5.3 參數個數不同的函式重載 218
9.5.4 套用示例 220
9.6 函式高級套用 222
9.7 小結 223
9.8 習題 224
第10章 指針與引用 230
10.1 指針概述 230
10.1.1 指針的基本概念 230
10.1.2 定義指針變數 231
10.1.3 初始化指針 232
10.2 指針的訪問 233
10.2.1 指針的值 234
10.2.2 訪問指針數據 235
10.2.3 套用示例 235
10.3 指針的算術運算 236
10.3.1 指針與整數的加減運算 237
10.3.2 指針加減1運算 238
10.3.3 指針的相減運算 239
10.3.4 套用示例 240
10.4 指針的關係運算 241
10.5 指向數組的指針 243
10.5.1 指針訪問數組元素 243
10.5.2 指向一維數組 244
10.5.3 數組指針 246
10.5.4 指向多維數組 247
10.6 指向字元串的指針 248
10.6.1 定義字元串指針 248
10.6.2 套用示例 249
10.7 引用 251
10.7.1 引用的套用 251
10.7.2 引用與指針 252
10.8 指針數組 254
10.9 函式與指針 256
10.9.1 指針作為函式參數 256
10.9.2 指針函式 258
10.9.3 函式指針 259
10.10 動態記憶體分配 260
10.11 指向指針的指針 262
10.12 小結 263
10.13 習題 263
第11章 宏和預編譯 271
11.1 預處理器和編譯器 271
11.2 預處理器的任務 272
11.2.1 包含檔案 272
11.2.2 搜尋頭檔案 272
11.2.3 定義宏 273
11.3 宏的作用 274
11.3.1 替代字面常量 274
11.3.2 替代運算符 275
11.3.3 聲明已定義符號 276
11.3.4 預定義的宏 276
11.4 帶參數的宏 277
11.4.1 定義帶參數的宏 277
11.4.2 注意宏展開的結果 279
11.4.3 帶參數的宏與函式的異同 279
11.4.4 特殊的宏符號 280
11.5 宏指令和預定義宏 280
11.5.1 宏指令和預定義宏 280
11.5.2 利用預定義的宏指令進行條件編譯 281
11.5.3 檔案包含命令和包含警衛 284
11.6 綜合實例 286
11.7 小結 286
11.8 習題 286
第12章 複合數據類型 291
12.1 定義結構體 291
12.1.1 結構體概述 291
12.1.2 定義結構體類型 292
12.1.3 聲明結構體變數 292
12.2 結構體的套用 294
12.2.1 初始化結構體變數 294
12.2.2 引用結構體變數成員 295
12.2.3 結構體指針 297
12.2.4 結構體數組 298
12.3 聯合 299
12.3.1 定義联合類型 299
12.3.2 聲明聯合變數 300
12.3.3 引用聯合類型成員 301
12.4 枚舉 302
12.4.1 定義枚舉類型 302
12.4.2 聲明枚舉變數 304
12.4.3 引用枚舉變數成員 305
12.5 用戶自定義數據類型 306
12.6 複合數據類型綜合套用 307
12.7 小結 309
12.8 習題 309
第2篇 面向對象編程篇
第13章 對象與類 316
13.1 對象與類概述 316
13.1.1 對象 316
13.1.2 對象分類 316
13.1.3 類 317
13.2 面向對象開發與面向過程開發的比較 318
13.2.1 面向過程開發 318
13.2.2 面向對象開發 318
13.3 類的特徵 319
13.3.1 封裝 319
13.3.2 繼承 319
13.3.3 多態 320
13.4 從結構到類 320
13.5 類 323
13.5.1 類的聲明 323
13.5.2 類的訪問控制 324
13.5.3 類的定義 325
13.6 構造函式 328
13.6.1 構造函式的概念 329
13.6.2 構造函式的聲明和定義 329
13.6.3 構造函式的調用 331
13.6.4 不帶參數的構造函式` 332
13.6.5 帶有默認參數的構造函式 333
13.6.6 構造函式的重載 334
13.7 拷貝構造函式 335
13.7.1 自定義拷貝構造函式 335
13.7.2 調用拷貝構造函式 337
13.7.3 默認拷貝構造函式 338
13.8 析構函式 339
13.9 友元 341
13.9.1 友元函式 341
13.9.2 友元成員 342
13.9.3 友元類 344
13.10 類的static成員 346
13.10.1 定義static成員 346
13.10.2 使用static成員 347
13.11 小結 350
13.12 習題 350
第14章 繼承 359
14.1 繼承與派生 359
14.1.1 繼承與派生概述 359
14.1.2 聲明派生類 359
14.2 繼承的訪問控制 360
14.2.1 公有繼承 361
14.2.2 私有繼承 363
14.2.3 保護繼承 364
14.3 派生類的構造函式和析構函式 368
14.3.1 執行順序和構建原則 368
14.3.2 派生類構造函式的創建 369
14.3.3 派生類析構函式的構建 369
14.4 多重繼承 371
14.4.1 二義性問題 371
14.4.2 多重繼承 374
14.4.3 多重繼承的構造函式和析構函式 376
14.5 虛基類 378
14.5.1 虛基類的引入 378
14.5.2 虛基類 380
14.5.3 虛基類的構造函式和初始化 381
14.6 小結 383
14.7 習題 383
第15章 多態 393
15.1 多態 393
15.1.1 多態的含義 393
15.1.2 多態的作用 393
15.1.3 多態的引入 394
15.2 函式重載 396
15.3 虛函式 397
15.3.1 定義虛函式 397
15.3.2 多級繼承和虛函式 399
15.4 純虛函式與抽象類 401
15.4.1 純虛函式 401
15.4.2 抽象類 403
15.5 小結 405
15.6 習題 405
第16章 運算符重載 414
16.1 運算符重載簡介 414
16.1.1 運算符重載的定義 414
16.1.2 運算符重載的特點 414
16.2 運算符重載形式 416
16.2.1 重載為類的成員函式 416
16.2.2 運算符重載為類的友元函式 419
16.2.3 運算符成員函式與友元運算符函式的比較 422
16.3 特殊運算符重載 422
16.3.1 “++”和“--”重載 422
16.3.2 賦值運算符“=”重載 424
16.3.3 下標運算符“[ ]”重載 426
16.4 類類型轉換 427
16.5 小結 429
16.6 習題 429
第17章 輸入/輸出流 437
17.1 輸入/輸出流的引入 437
17.1.1 c語言中輸入/輸出缺陷 437
17.1.2 輸入/輸出流簡介 438
17.1.3 輸入/輸出流類層次 439
17.2 標準輸入/輸出流 440
17.2.1 標準輸出流對象 440
17.2.2 標準輸入流對象 443
17.3 輸入/輸出流成員函式 445
17.3.1 get()函式 445
17.3.2 getline()函式 446
17.3.3 put()函式 447
17.3.4 read()和write()函式 447
17.3.5 其他成員函式 448
17.4 輸入/輸出格式控制 448
17.4.1 用ios類的成員函式進行格式控制 449
17.4.2 使用格式控制符進行格式控制 451
17.5 用戶自定義數據類型的輸入/輸出 455
17.5.1 重載輸出運算符“<<” 455
17.5.2 重載輸入運算符“>>” 457
17.6 綜合實例 458
17.7 命名空間 460
17.7.1 命名空間概述 460
17.7.2 定義命名空間 460
17.7.3 使用命名空間 462
17.8 小結 465
17.9 習題 466
第18章 檔案 471
18.1 檔案概述 471
18.1.1 操作檔案的過程 471
18.1.2 處理檔案流的類 473
18.2 檔案的打開與關閉 476
18.2.1 打開檔案 476
18.2.2 關閉檔案 478
18.3 檔案的順序讀寫 479
18.3.1 讀寫文本檔案 480
18.3.2 文本檔案套用示例 481
18.3.3 讀寫二進制檔案 483
18.4 檔案的隨機讀寫 487
18.5 綜合實例 488
18.6 小結 493
18.7 習題 493
第19章 類模板 499
19.1 什麼是類模板 499
19.2 定義類模板 500
19.2.1 語法 500
19.2.2 非類型參數 502
19.2.3 模板參數的預設實參 503
19.3 生成類模板的實例 503
19.3.1 類型參數的模板實例化 503
19.3.2 非類型參數的模板實例化 504
19.3.3 類模板範例 504
19.4 類模板的靜態成員 506
19.5 類模板的友元 509
19.6 類模板的特化 511
19.6.1 類模板的全特化 511
19.6.2 偏特化 512
19.6.3 類模板的匹配規則 513
19.7 小結 515
19.8 習題 515
第20章 標準模板庫stl 521
20.1 標準模板庫概述 521
20.1.1 c++標準庫 521
20.1.2 stl的形成 522
20.1.3 stl的組成 522
20.1.4 stl的引入 523
20.2 算法 525
20.3 容器 527
20.3.1 容器概述 527
20.3.2 向量 528
20.3.3 列表 529
20.3.4 集合 531
20.3.5 雙端佇列 532
20.3.6 棧 534
20.3.7 映射和多重映射 535
20.4 疊代器 536
20.5 綜合練習 537
20.6 小結 538
20.7 習題 538
第21章 程式調試與異常處理 543
21.1 程式錯誤 543
21.1.1 編譯錯誤 543
21.1.2 邏輯錯誤 544
21.1.3 運行錯誤 545
21.2 程式調試 546
21.2.1 dev-c++的調試功能 546
21.2.2 調試程式示例 547
21.3 異常處理 549
21.3.1 基本思想 549
21.3.2 拋出異常 551
21.3.3 捕獲異常 551
21.4 錯誤處理實例 553
21.5 異常處理實例 555
21.6 小結 556
21.7 習題 556
第3篇 綜合案例篇
第22章 人事管理系統開發實例 561
22.1 需求分析 561
22.2 系統設計 562
22.2.1 概要設計 562
22.2.2 詳細設計 563
22.2.3 數據結構設計 564
22.3 系統實現 565
22.3.1 創建應用程式 566
22.3.2 註冊職工 567
22.3.3 更新職工信息 568
22.3.4 職工去職 571
22.3.5 查詢職工信息 572
22.3.6 保存數據 573
22.3.7 工資排序 574
22.3.8 職工信息顯示 576
22.4 系統集成 577
22.5 小結 580
22.6 習題 580
前言
C++是近年廣泛使用的程式設計語言,最主要的特點是支持面向對象的程式設計方法。在軟體工業領域一直處於領先地位,在各個領域中有廣泛套用。很多初學者對於學習C++語言都感到不能很快上手,不能自行編寫C++程式。學習C++語言,必須經過大量的練習,多讀程式、多寫程式,才能有比較好的效果。
通過閱讀本書來學習C++時,讀者不需要有任何編程經驗。本書從入門開始,既介紹C++語言,又討論使用C++進行編程涉及的概念。本書提供了大量語法實例和詳細的代碼分析,它們是引導讀者完成C++編程之旅的優秀嚮導。無論讀者是剛開始學習編程還是已經有一些編程經驗,書中精心安排的內容,都將讓你的C++學習變得既快速又輕鬆。
筆者長期從事C++的開發工作,十分了解初學者在學習過程中的一些問題和困惑。本書的目的是為了讓C++語言的初學者對於C++語言有系統和全面的認識。同時,為了讓讀者能夠理解C++開發的核心思想,在講解的時候儘量結合筆者的獨特理解和感受,讓讀者能夠舉一反三。
本書內容體系與學習梯度
本書內容編寫體例
本書特色
1.講解細緻體貼,適合初學者學習
為了讓讀者更快地上手,本書特別設計了適合初學者的學習方式,用準確的語言總結概念,用直觀的圖示演示過程,用詳細的注釋解釋代碼,用形象的比方幫助記憶。
2.內容全面系統,具有參考價值
本書幾乎囊括了C++的所有知識點,對C++的面向過程程式設計、面向對象程式設計、模板庫、檔案流等內容都做了具體講解,對中高級讀者具有參考價值。
3.綜合案例講解,提高套用水平
本書在講解知識點時,貫穿了大量有針對性的典型實例,並給出了對應的開發技巧,以便讓讀者更好地理解各種概念和方法,體驗實際編程,加深理解程度。
4.操作練習豐富,鞏固基礎知識點
本書的課後習題豐富並且都是具有操作性的系統,讀者在閱讀完章節知識點後,通過這些作業系統的實踐,可迅速鞏固並掌握基礎知識點。
本書內容及體系結構
第1篇 C++基礎篇(第1~12章)
本篇主要內容包括:C++的基礎知識、C++程式中的變數和數據類型、表達式和語句、流程控制結構、數組與字元串、函式以及函式的高級套用、指針與引用、宏和預編譯及複合數據類型等。通過本篇的學習,讀者可以掌握C++的基礎知識點和C++面向過程開發流程。
第2篇 面向對象編程篇(第13~21章)
本篇主要內容包括:面向對象的開發及類的封裝、繼承、多態、運算符重載、輸入/輸出流、檔案、類模板以及標準模板庫STL。通過本篇的學習,讀者可以掌握C++面向對象編程的核心概念和流程。
第3篇 綜合案例篇(第22章)
. 本篇主要內容包括:程式調試與異常處理、人事管理系統的開發。通過本篇的學習,讀者可以全面套用前面章節所學的開發技術進行軟體項目開發,達到可以獨立開發項目的水平。
適合閱讀本書的讀者
沒有任何語言學習經驗的C++語言初學者。
有志於成為C++語言程式設計師的讀者。
了解一些C++,但還需要進一步學習的人員。
在某些需要使用C++編程的特殊領域的工作人員。
有程式語言基礎或正在學習數據結構需要參考C++語言的讀者。