C++20 實踐入門, 6/e (Beginning C++20: From Novice to Professional, 6/e)
Ivor Horton,Peter Van Weert 譯 周百順
- 出版商: 清華大學
- 出版日期: 2022-03-01
- 售價: $948
- 貴賓價: 9.5 折 $901
- 語言: 簡體中文
- 裝訂: 平裝
- ISBN: 7302596794
- ISBN-13: 9787302596790
-
相關分類:
C++ 程式語言
- 此書翻譯自: Beginning C++20: From Novice to Professional, 6/e (Paperback)
立即出貨
買這商品的人也買了...
-
$1,568Microelectronics Circuit Analysis and Design, 4/e (IE-Paperback)
-
$1,200$948 -
$403C++11/14 高級編程 : Boost 程序庫探秘, 3/e
-
$520$411 -
$580$493 -
$580$493 -
$894$849 -
$599$509 -
$779$740 -
$719$683 -
$505AI 嵌入式系統:算法優化與實現
-
$880$695 -
$680$537 -
$774$735 -
$1,368$1,300 -
$654$621 -
$780$616 -
$719$683 -
$654$621 -
$1,730$1,644 -
$713$677 -
$1,900$1,805 -
$450$351 -
$534$507 -
$654$621
相關主題
商品描述
主要內容: ● 開始使用C++20標準編寫程序 ● 使用C++進行模塊化編程 ● 使用數組、循環、指針、引用和字符串等 ● 編寫自己的函數、類型和運算符 ● 瞭解面向對象編程的要素 ● 使用重載、繼承、虛函數和多態性 ● 編寫泛型函數和類模板,並使用概念讓它們更安全 ● 深入瞭解容器、算法和範圍 ● 使用自動類型推斷、異常、移動語義、lambda表達式等
目錄大綱
第1章 基本概念 1
1.1 現代C++ 1
1.2 標準庫 2
1.3 C++程序概念 3
1.3.1 源文件 3
1.3.2 註釋和空白 3
1.3.3 標準庫模塊 4
1.3.4 函數 4
1.3.5 語句 5
1.3.6 數據的輸入和輸出 6
1.3.7 return語句 6
1.3.8 名稱空間 6
1.3.9 名稱和關鍵字 7
1.4 類和對象 7
1.5 模板 8
1.6 代碼的表示樣式和編程風格 8
1.7 創建可執行文件 9
1.8 過程化編程和麵向對象編程 10
1.9 表示數字 11
1.9.1 二進制數 11
1.9.2 十六進制數 12
1.9.3 負的二進制數 13
1.9.4 八進制數 15
1.9.5 Big-Endian和Little-Endian系統 15
1.9.6 浮點數 16
1.10 表示字符 17
1.10.1 ASCII 碼 18
1.10.2 UCS和Unicode 18
1.11 C++源字符 19
1.12 本章小結 20
1.13 練習 21
第2章 基本數據類型 23
2.1 變量、數據和數據類型 23
2.1.1 定義整型變量 24
2.1.2 零初始化 27
2.1.3 定義有固定值的變量 27
2.2 整型字面量 27
2.2.1 十進制整型字面量 27
2.2.2 十六進制的整型字面量 28
2.2.3 八進制的整型字面量 29
2.2.4 二進制的整型字面量 29
2.3 整數的計算 29
2.4 賦值運算 31
2.5 sizeof運算符 35
2.6 整數的遞增和遞減 35
2.7 定義浮點變量 37
2.8 浮點字面量 38
2.9 浮點數的計算 38
2.9.1 數學常量 38
2.9.2 數學函數 39
2.9.3 無效的浮點結果 42
2.9.4 缺點 43
2.10 混合的表達式和類型轉換 43
2.11 顯式類型轉換 44
2.12 格式化字符串 47
2.13 確定數值的上下限 52
2.14 使用字符變量 54
2.15 auto關鍵字 56
2.16 本章小結 57
2.17 練習 57
第3章 處理基本數據類型 59
3.1 運算符的優先級和相關性 59
3.2 位運算符 61
3.2.1 移位運算符 61
3.2.2 位模式下的邏輯運算 64
3.3 變量的生存期 69
3.4 全局變量 70
3.5 枚舉數據類型 73
3.6 數據類型的別名 76
3.7 本章小結 77
3.8 練習 78
第4章 決策 79
4.1 比較數據值 79
4.1.1 應用比較運算符 80
4.1.2 比較浮點數值 81
4.1.3 太空飛船運算符 82
4.2 if語句 84
4.2.1 嵌套的if語句 87
4.2.2 字符分類和轉換 88
4.3 if-else語句 90
4.3.1 嵌套的if-else語句 91
4.3.2 理解嵌套的if語句 92
4.4 邏輯運算符 93
4.4.1 邏輯與運算符 94
4.4.2 邏輯或運算符 94
4.4.3 邏輯非運算符 95
4.4.4 組合邏輯運算符 95
4.4.5 對整數操作數應用邏輯運算符 97
4.4.6 對比邏輯運算符與位運算符 97
4.5 條件運算符 99
4.6 switch語句 100
4.7 語句塊和變量作用域 106
4.8 本章小結 108
4.9 練習 108
第5章 數組和循環 111
5.1 數組 111
5.2 理解循環 113
5.3 for循環 113
5.4 避免幻數 115
5.5 用初始化列表定義數組的大小 117
5.6 確定數組的大小 117
5.7 用浮點數控制for循環 119
5.8 使用更復雜的for循環控制
表達式 120
5.9 基於範圍的for循環 122
5.10 while循環 123
5.11 do-while循環 125
5.12 嵌套的循環 127
5.13 跳過循環迭代 129
5.14 循環的中斷 131
5.15 使用無符號整數控制for循環 134
5.16 字符數組 135
5.17 多維數組 138
5.17.1 初始化多維數組 140
5.17.2 多維字符數組 141
5.18 在運行期間給數組分配內存
空間 143
5.19 數組的替代品 145
5.19.1 使用array<T,N>容器 145
5.19.2 使用std::vector<T>容器 150
5.20 本章小結 153
5.21 練習 154
第6章 指針和引用 157
6.1 什麽是指針 157
6.2 地址運算符 159
6.3 間接運算符 160
6.4 為什麽使用指針 161
6.5 char類型的指針 162
6.6 常量指針和指向常量的指針 165
6.7 指針和數組 167
6.7.1 指針的算術運算 168
6.7.2 使用數組名的指針表示法 170
6.8 動態內存分配 172
6.8.1 棧和自由存儲區 172
6.8.2 運算符new和delete 173
6.8.3 數組的動態內存分配 174
6.9 通過指針選擇成員 177
6.10 動態內存分配的危險 178
6.10.1 懸掛指針和多次釋放 178
6.10.2 分配與釋放的不匹配 178
6.10.3 內存泄漏 179
6.10.4 自由存儲區的碎片 179
6.11 內存分配的黃金準則 180
6.12 原始指針和智能指針 180
6.12.1 使用unique_ptr<T>指針 181
6.12.2 使用shared_ptr<T>指針 184
6.13 理解引用 187
6.13.1 定義引用 187
6.13.2 在基於範圍的for循環中
使用引用變量 188
6.14 本章小結 189
6.15 練習 190
第7章 操作字符串 191
7.1 更強大的string類 191
7.1.1 定義string對象 191
7.1.2 string對象的操作 195
7.1.3 訪問字符串中的字符 198
7.1.4 訪問子字符串 200
7.1.5 比較字符串 201
7.1.6 搜索字符串 207
7.1.7 修改字符串 213
7.1.8 對比std::string與
std::vector<char> 217
7.2 將字符串轉換為數字 217
7.3 國際字符串 218
7.3.1 存儲wchar_t字符的字符串 218
7.3.2 包含Unicode字符串的對象 219
7.4 原始字符串字面量 219
7.5 本章小結 221
7.6 練習 221
第8章 定義函數 223
8.1 程序的分解 223
8.1.1 類中的函數 224
8.1.2 函數的特徵 224
8.2 定義函數 224
8.2.1 函數體 226
8.2.2 返回值 227
8.2.3 函數聲明 227
8.3 給函數傳遞實參 229
8.3.1 按值傳遞 229
8.3.2 按引用傳遞 236
8.4 默認實參值 242
8.5 main()函數的實參 244
8.6 從函數中返回值 245
8.6.1 返回指針 245
8.6.2 返回引用 249
8.6.3 對比返回值與輸出參數 249
8.6.4 返回類型推斷 250
8.7 靜態變量 251
8.8 函數重載 252
8.8.1 重載和指針參數 254
8.8.2 重載和引用參數 254
8.8.3 重載和const參數 256
8.8.4 重載和默認實參值 257
8.9 遞歸 258
8.9.1 基本示例 258
8.9.2 遞歸算法 260
8.10 本章小結 265
8.11 練習 266
第9章 詞匯類型 269
9.1 使用可選值 269
9.2 字符串視圖:新的const string
引用 272
9.2.1 使用字符串視圖函數參數 274
9.2.2 合適的動機 274
9.3 span:新的向量或數組引用 275
9.3.1 span與視圖 276
9.3.2 const元素的span 277
9.3.3 固定大小的span 278
9.4 本章小結 278
9.5 練習 278
第10章 函數模板 281
10.1 函數模板 281
10.2 創建函數模板的實例 282
10.3 模板類型參數 283
10.4 顯式指定模板實參 284
10.5 函數模板的特化 284
10.6 函數模板和重載 285
10.7 帶有多個參數的函數模板 286
10.8 模板的返回類型推斷 287
10.9 模板參數的默認值 289
10.10 非類型的模板參數 290
10.11 縮寫的函數模板 293
10.12 本章小結 294
10.13 練習 294
第11章 模塊和名稱空間 297
11.1 模塊 297
11.1.1 第一個模塊 298
11.1.2 導出塊 300
11.1.3 將接口與實現分開 301
11.1.4 可達性與可見性 305
11.1.5 導出import聲明 306
11.1.6 管理較大的模塊 307
11.1.7 全局模塊片段 310
11.2 名稱空間 311
11.2.1 全局名稱空間 311
11.2.2 定義名稱空間 311
11.2.3 嵌套名稱空間 313
11.2.4 名稱空間和模塊 314
11.2.5 函數和名稱空間 315
11.2.6 使用指令和聲明 316
11.2.7 名稱空間別名 318
11.3 本章小結 318
11.4 練習 319
第12章 定義自己的數據類型 321
12.1 類和麵向對象編程 321
12.1.1 封裝 322
12.1.2 繼承 325
12.1.3 多態性 326
12.2 術語 326
12.3 定義類 327
12.4 構造函數 329
12.4.1 默認構造函數 329
12.4.2 定義類的構造函數 330
12.4.3 使用default關鍵字 331
12.4.4 在類的外部定義函數 332
12.4.5 默認構造函數的參數值 333
12.4.6 使用成員初始化列表 333
12.4.7 使用explicit關鍵字 334
12.4.8 委托構造函數 336
12.4.9 副本構造函數 337
12.5 訪問私有類成員 340
12.6 this指針 342
12.7 const對象和const成員函數 343
12.7.1 const成員函數 344
12.7.2 const正確性 345
12.7.3 重載const 346
12.7.4 常量的強制轉換 348
12.7.5 使用mutable關鍵字 348
12.8 友元 349
12.8.1 類的友元函數 349
12.8.2 友元類 351
12.9 類的對象數組 351
12.10 類對象的大小 353
12.11 類的靜態成員 353
12.11.1 靜態成員變量 354
12.11.2 訪問靜態成員變量 356
12.11.3 靜態常量 357
12.11.4 類類型的靜態成員變量 358
12.11.5 靜態成員函數 358
12.12 析構函數 359
12.13 使用指針作為類成員 361
12.14 嵌套類 374
12.15 本章小結 378
12.16 練習 379
第13章 運算符重載 381
13.1 為類實現運算符 381
13.1.1 運算符重載 382
13.1.2 實現重載運算符 382
13.1.3 非成員運算符函數 384
13.1.4 提供對運算符的全部支持 384
13.2 可以重載的運算符 386
13.3 運算符函數習語 388
13.4 為輸出流重載<<運算符 394
13.5 重載算術運算符 396
13.6 成員與非成員函數 400
13.7 重載一元運算符 402
13.8 重載遞增和遞減運算符 403
13.9 重載下標運算符 404
13.10 函數對象 409
13.11 重載類型轉換 410
13.12 重載賦值運算符 411
13.12.1 實現復制賦值運算符 411
13.12.2 復制賦值運算符與副本
構造函數 415
13.12.3 賦值不同類型 415
13.13 本章小結 416
13.14 練習 416
第14章 繼承 419
14.1 類和麵向對象編程 419
14.2 類的繼承 420
14.2.1 繼承和聚合 421
14.2.2 派生類 422
14.3 把類的成員聲明為protected 424
14.4 派生類成員的訪問級別 424
14.4.1 在類層次結構中使用訪問
修飾符 425
14.4.2 在類層次結構中選擇訪問
修飾符 426
14.4.3 改變繼承成員的訪問修飾符 427
14.5 派生類中的構造函數 428
14.5.1 派生類中的副本構造函數 431
14.5.2 派生類中的默認構造函數 432
14.5.3 繼承構造函數 433
14.6 繼承中的析構函數 434
14.7 重復的成員變量名 436
14.8 重復的成員函數名 436
14.9 多重繼承 437
14.9.1 多個基類 437
14.9.2 繼承成員的模糊性 438
14.9.3 重復繼承 442
14.9.4 虛基類 442
14.10 在相關的類類型之間轉換 443
14.11 本章小結 444
14.12 練習 444
第15章 多態性 447
15.1 理解多態性 447
15.1.1 使用基類指針 447
15.1.2 調用繼承的函數 449
15.1.3 虛函數 452
15.1.4 虛函數中的默認實參值 459
15.1.5 通過引用調用虛函數 460
15.1.6 多態集合 461
15.1.7 通過指針釋放對象 462
15.1.8 在指針和類對象之間轉換 464
15.1.9 動態強制轉換 465
15.1.10 調用虛函數的基類版本 468
15.1.11 在構造函數或析構函數中
調用虛函數 469
15.2 多態性引發的成本 471
15.3 確定動態類型 472
15.4 純虛函數 475
15.4.1 抽象類 476
15.4.2 用作接口的抽象類 478
15.5 本章小結 481
15.6 練習 481
第16章 運行時錯誤和異常 483
16.1 處理錯誤 483
16.2 理解異常 484
16.2.1 拋出異常 485
16.2.2 異常處理過程 486
16.2.3 導致拋出異常的代碼 487
16.2.4 嵌套的try塊 488
16.3 用類對象作為異常 489
16.3.1 匹配catch處理程序和異常 491
16.3.2 用基類處理程序捕獲派生類
異常 493
16.4 重新拋出異常 495
16.5 未處理的異常 497
16.6 捕獲所有的異常 498
16.7 不拋出異常的函數 500
16.7.1 noexcept限定符 500
16.7.2 異常和析構函數 501
16.8 異常和資源泄露 501
16.8.1 資源獲取即初始化 503
16.8.2 用於動態內存的標準RAII類 505
16.9 標準庫異常 506
16.9.1 異常類的定義 507
16.9.2 使用標準異常 508
16.10 本章小結 512
16.11 練習 512
第17章 類模板 515
17.1 理解類模板 515
17.2 定義類模板 516
17.2.1 模板類型參數 517
17.2.2 簡單的類模板 518
17.3 定義類模板的成員函數 519
17.3.1 構造函數模板 519
17.3.2 析構函數模板 520
17.3.3 下標運算符模板 520
17.3.4 賦值運算符模板 522
17.4 創建類模板的實例 526
17.5 測試數組類模板 527
17.6 非類型的類模板參數 530
17.6.1 帶有非類型參數的成員函數的
模板 531
17.6.2 非類型參數的實參 534
17.6.3 對比非類型模板實參與構造
函數實參 535
17.7 模板參數的默認值 536
17.8 類模板實參推斷 536
17.9 類模板特化 538
17.9.1 定義類模板特化 538
17.9.2 部分模板特化 539
17.10 帶有嵌套類的類模板 540
17.11 依賴名稱的麻煩問題 546
17.12 本章小結 550
17.13 練習 551
第18章 移動語義 555
18.1 lvalue和rvalue 555
18.2 移動對象 557
18.3 顯式移動對象 563
18.3.1 只能移動的類型 563
18.3.2 移動對象的繼續使用 564
18.4 看似矛盾的情況 565
18.4.1 std::move()並不移動任何東西 565
18.4.2 rvalue引用是一個lvalue 566
18.5 繼續探討函數定義 566
18.5.1 按rvalue引用傳遞 566
18.5.2 按值傳遞 568
18.5.3 按值返回 570
18.6 繼續討論定義移動成員 572
18.6.1 總是添加noexcept 572
18.6.2 “移動後交換”技術 575
18.7 特殊成員函數 577
18.7.1 默認移動成員 578
18.7.2 5的規則 578
18.7.3 0的規則 579
18.8 本章小結 580
18.9 練習 580
第19章 頭等函數 583
19.1 函數指針 583
19.1.1 定義函數指針 584
19.1.2 高階函數的回調函數 586
19.1.3 函數指針的類型別名 588
19.2 函數對象 589
19.2.1 基本的函數對象 589
19.2.2 標準函數對象 591
19.2.3 參數化函數對象 592
19.3 lambda表達式 593
19.3.1 定義lambda表達式 593
19.3.2 命名lambda閉包 594
19.3.3 向函數模板傳遞lambda
表達式 595
19.3.4 泛型lambda 596
19.3.5 捕獲子句 596
19.4 std::function<>模板 600
19.5 本章小結 602
19.6 練習 603
第20章 容器與算法 605
20.1 容器 605
20.1.1 順序容器 606
20.1.2 棧和隊列 608
20.1.3 關聯容器 610
20.2 迭代器 617
20.2.1 迭代器設計模式 617
20.2.2 標準庫容器的迭代器 618
20.2.3 數組的迭代器 626
20.3 算法 627
20.3.1 第一個示例 627
20.3.2 尋找元素 629
20.3.3 處理多個輸出值 630
20.3.4 刪除-擦除技術 632
20.3.5 排序 634
20.3.6 並行算法 635
20.3.7 範圍與視圖 635
20.4 視圖與範圍 637
20.5 本章小結 641
20.6 練習 642
第21章 受約束的模板和概念 645
21.1 無約束模板 645
21.2 受約束的模板 646
21.3 概念 648
21.3.1 概念定義和表達式 648
21.3.2 requires表達式 649
21.3.3 斷言類型建模了一個概念 653
21.3.4 標準概念 653
21.4 requires子句 654
21.5 簡寫表示法 655
21.6 受約束的函數模板 656
21.7 受約束的類模板 657
21.8 基於約束的特化 659
21.9 約束auto 661
21.10 本章小結 662
21.11 練習 662