C++程序設計語言——現代C++(23標準)

龐雄文、李鄉儒、張金區

  • 出版商: 清華大學
  • 出版日期: 2026-04-01
  • 定價: $419
  • 售價: $418
  • 語言: 簡體中文
  • ISBN: 7302714002
  • ISBN-13: 9787302714002
  • 相關分類: C++ 程式語言
  • 下單後立即進貨 (約4週~6週)

  • C++程序設計語言——現代C++(23標準)-preview-1
  • C++程序設計語言——現代C++(23標準)-preview-2
  • C++程序設計語言——現代C++(23標準)-preview-3
  • C++程序設計語言——現代C++(23標準)-preview-4
  • C++程序設計語言——現代C++(23標準)-preview-5
  • C++程序設計語言——現代C++(23標準)-preview-6
  • C++程序設計語言——現代C++(23標準)-preview-7
C++程序設計語言——現代C++(23標準)-preview-1

商品描述

"本書是一本系統講解基於C++23標準的面向對象程序設計的教材。它整合**語言特性與工程實踐,旨在幫助讀者深入理解面向對象思想在C++中的高效實現方法,掌握工業級開發的**實踐。本書以“新標準?新思維?新實踐”為主線,從封裝、繼承、多態三大核心範式出發,結合C++23新特性(如標準化模塊增強、顯式對象參數、多維下標運算符、編譯時條件)重構經典程序,並對比動態多態(虛函數)與CRTP(奇異遞歸模板模式,靜態多態的實現方式之一)的應用場景。在模塊化編程方面,本書深入解析C++23標準的模塊(Module)機制,替代傳統頭文件包含方式,優化編譯效率與代碼組織。此外,本書強調資源管理與並發編程的現代範式,涵蓋智能指針的安全使用、協程的異步編程模型,以及範圍算法的高效數據處理。書中包含大量貼近實際開發的案例,如利用C++23標準改進的元編程技術實現編譯時計算,通過設計模式(如工廠模式、策略模式、觀察者模式)解決復雜軟件設計問題,輔以單元測試、代碼重構和性能優化技巧,確保讀者不僅能掌握理論,更能勝任真實項目開發。 本書內容分為三部分,共14章,基礎部分(第1~7章)從程序設計的基礎知識出發,主要講述程序設計的基本概念、語言基礎、程序的編譯和調試、模塊化編程等內容。核心概念部分(第8~10章)從C++23標準的核心特性切入,深入剖析面向對象三大特性(封裝、繼承、多態)在C++中的獨特實現方式,為後續學習奠定堅實的基礎;重點講解模塊化編程、移動語義和RAII機制等核心概念。進階技術部分(第11~14章)則聚焦於現代C++的高級特性應用,包括泛型編程和模板、概念和概念庫、標準模板庫和範圍、多線程和協程、錯誤處理的**實踐等內容。 本書適合高校計算機專業學生(需C++基礎)、希望升級至C++23標準的開發人員,以及對現代C++與面向對象設計結合感興趣的工程師使用。 "

目錄大綱

目錄

第1章C++概述/1

1.1計算機與程序的關系/1

1.2C++語言全景/2

1.3二進制編碼/3

1.3.1比特與整數的表示(原碼、反碼、補碼)/3

1.3.2小數(浮點數)的二進制表達/4

1.3.3八進制與十六進制/5

習題1/5

第2章第一個C++程序/7

2.1C++程序的基本組成/7

2.1.1註釋/8

2.1.2文件包含預處理指令#include/8

2.1.3模塊導入import/8

2.1.4main()函數/9

2.1.5輸入輸出流/9

2.2C++程序的編譯和執行/10

2.2.1程序編譯/10

2.2.2鏈接/10

習題2/11

第3章C++語言基礎/12

3.1字符集和詞法標記/12

3.1.1字符集/12

3.1.2詞法標記/133.1.3文本(字面量)/15

3.1.4語句/18

3.2基本數據類型、變量/18

3.2.1基本數據類型/18

3.2.2固定寬度數據類型/20

3.2.3數據類型別名/21

3.2.4字符串類std::string和std::string_view/21

3.2.5變量的定義和使用/24

3.3運算符與表達式/26

3.3.1算術運算符和算術表達式/26

3.3.2賦值運算符/28

3.3.3關系(比較)運算符/29

3.3.4邏輯運算符/31

3.3.5位運算符/32

3.3.6條件運算符、逗號運算符和sizeof運算符/33

3.3.7運算符的優先級和結合性/35

3.3.8隱式類型轉換/36

3.3.9顯式(強制)類型轉換/38

3.4選擇結構/39

3.4.1if語句/39

3.4.2ifelse語句/39

3.4.3帶初始化語句的if語句(C++23標準)/40

3.4.4constexpr if語句(C++17標準)/41

3.4.5switch語句/41

3.5循環結構/43

3.5.1for循環/43

3.5.2rangefor循環/44

3.5.3while循環/45

3.5.4dowhile循環/46

3.5.5跳轉語句/46

3.5.6循環結構的使用/48

3.5.7循環使用例子——計算π的值/48

3.6基本輸入輸出/49

3.6.1標準輸出/49

3.6.2標準輸入/49

3.7常量的定義和使用/50

3.7.1宏定義/50

3.7.2const關鍵字/50

3.7.3constexpr關鍵字/51

習題3/51

第4章指針和數組/53

4.1C++程序的內存模型/53

4.1.1變量和變量地址/53

4.1.2操作內存地址/55

4.2指針的定義和使用/56

4.2.1指針變量的定義/56

4.2.2指針變量的使用/56

4.2.3指針的類型轉換/60

4.3引用的定義和使用/61

4.4數組的定義和使用/62

4.4.1一維數組的定義和使用/62

4.4.2二維數組的定義和使用/64

4.4.3一維數組和二維數組的使用案例/65

4.4.4std::array/65

4.5指針和數組的對偶性/67

4.5.1數組就是指針/67

4.5.2指針的算術運算/68

4.5.3指針和二維數組/69

4.6指針與動態存儲分配/70

4.6.1動態存儲分配/70

4.6.2動態存儲分配存在的問題/72

4.6.3std::vector/73

4.7智能指針/74

4.7.1對象所有權/74

4.7.2unique_ptr——獨占所有權的智能指針/74

4.7.3shared_ptr——共享所有權的智能指針/76

4.7.4weak_ptr——弱引用的智能指針/78

4.8字符指針和字符數組/79

4.8.1字符指針/79

4.8.2字符數組/80

習題4/80

第5章函數/82

5.1函數的定義、聲明和調用/82

5.1.1函數的定義/825.1.2函數的聲明/83

5.1.3函數的調用/85

5.2參數傳遞/88

5.2.1值傳遞/88

5.2.2引用傳遞/89

5.2.3指針傳遞/89

5.2.4數組作為函數的形參/90

5.3返回值/91

5.3.1返回單個值/91

5.3.2使用std::tuple返回多個值/92

5.3.3返回值類型自動推導/93

5.4函數重載/94

5.5函數遞歸/95

5.5.1典型的遞歸應用——漢諾塔問題/96

5.5.2函數遞歸的優化/97

5.6函數指針/98

5.6.1函數指針的定義/98

5.6.2函數指針的賦值/98

5.6.3通過函數指針調用函數/99

5.6.4函數指針作為函數參數和返回值/99

5.6.5使用std::function代替函數指針/99

5.7Lambda表達式/100

習題5/102

第6章結構體及應用/104

6.1概述/104

6.2結構體類型/105

6.2.1結構體類型的定義/105

6.2.2使用結構體類型/106

6.2.3訪問結構體變量的成員/107

6.2.4位域和位向量/109

6.2.5C++對struct關鍵字的擴展/109

6.3結構體的典型應用——鏈表/109

6.3.1插入數據創建鏈表/110

6.3.2鏈表和數組的區別/111

6.4枚舉/112

6.4.1無作用域枚舉/112

6.4.2有作用域枚舉/113

6.5聯合體/113

習題6/114

第7章程序的組織、異常和預處理/116

7.1命名空間/116

7.2變量的作用域和存儲期/118

7.2.1變量的作用域/118

7.2.2全局變量和局部變量/119

7.2.3變量的存儲期/119

7.3異常處理/121

7.3.1trycatch語句/121

7.3.2throw——拋出異常/122

7.3.3未定義行為/123

7.4預處理指令/124

7.4.1文件包含指令/124

7.4.2宏定義和替換/124

7.4.3條件編譯指令/126

7.4.4編譯控制指令/126

習題7/127

第8章類與對象/129

8.1面向對象程序設計的基本特點/129

8.2定義和使用類/132

8.2.1類的定義/132

8.2.2使用類——對象/133

8.2.3前置聲明/134

8.2.4非靜態數據成員/134

8.2.5非靜態成員函數/137

8.2.6嵌套類/142

8.2.7類的定義和實現分離/143

8.3類的特殊成員函數/144

8.3.1構造函數/145

8.3.2析構函數/152

8.3.3賦值運算符函數/153

8.3.4類型轉換函數/154

8.3.5臨時對象/156

8.4類的靜態成員/1568.4.1靜態數據成員/156

8.4.2靜態成員函數/158

8.5友元/158

8.6對象成員/160

8.7類的設計實例/161

8.7.1簡單類(學生類)的設計/161

8.7.2復雜類(讀取Excel表格)的設計/164

習題8/165

第9章運算符重載/167

9.1運算符重載的定義/167

9.1.1運算符重載的意義和使用場景/167

9.1.2運算符重載的語法/168

9.2單目運算符重載/170

9.3雙目運算符重載/172

9.4特殊運算符重載/173

9.4.1operator new和operator delete/173

9.4.2operator++和operator--/173

9.4.3operator[]/175

9.4.4默認比較運算符(C++20標準之後)/175

9.4.5operator=/177

9.4.6operator()/177

9.4.7operator<<和operator>>/177

9.5案例——大整數類/178

9.5.1類的目標和設計/178

9.5.2示例代碼(僅類定義,實現不完整)/179

習題9/181

第10章繼承和多態/183

10.1類之間的關系/183

10.2派生類的定義和使用/186

10.2.1派生類的定義/186

10.2.2繼承方式/189

10.2.3使用派生類/190

10.3派生類的構造函數和析構函數/195

10.3.1構造函數的調用方法/195

10.3.2基類構造函數的鏈式調用/19610.3.3using聲明和繼承構造函數/197

10.3.4復制構造函數/198

10.3.5析構函數/199

10.3.6delete基類構造函數和析構函數/199

10.4重復繼承和虛基類/200

10.4.1重復(菱形、鉆石)繼承/200

10.4.2虛基類/200

10.4.3虛基類和虛基類共存規則/201

10.4.4虛基類構造函數的調用/201

10.5虛函數和多態/203

10.5.1編譯時多態/203

10.5.2運行時多態/204

10.5.3多態的實現機制(擴展)/207

10.6純虛函數和抽象類/208

10.6.1純虛函數/208

10.6.2抽象類/208

10.7案例/209

10.7.1高斯消元法求解線性方程/209

10.7.2圖形類及其派生類/212

習題10/213

第11章泛型編程和模板/215

11.1泛型編程和模板 /215

11.1.1泛型編程/215

11.1.2模板/216

11.2函數模板 /217

11.2.1函數模板的定義/218

11.2.2函數模板的顯式實例化/219

11.2.3函數模板的隱式實例化/221

11.3類模板/222

11.3.1類模板的定義/222

11.3.2類模板的實例化/224

11.3.3CTAD——類模板參數的自動推導(C++17標準

之後)/225

11.3.4類模板的特化/227

11.3.5類模板的繼承/229

11.3.6成員模板/231

11.3.7CRTP——奇異遞歸模式/236

11.4概念和概念庫(C++20標準之後)/238

11.4.1概念中的約束/239

11.4.2概念/240

11.4.3標準庫中的類型工具/244

11.4.4概念庫中的預定義概念/246

11.5類模板案例/248

習題11/251

第12章輸入與輸出/253

12.1輸入輸出流的概念和結構/253

12.1.1流的概念/253

12.1.2流和緩沖區/254

12.1.3預定義的標準輸入輸出流對象/255

12.2流輸入與輸出/255

12.2.1格式化輸入輸出/255

12.2.2無格式輸入輸出/260

12.2.3cin和cout的重定向/262

12.2.4緩沖區操作/262

12.3文件流/264

12.3.1常用的文件類成員/264

12.3.2文本文件讀寫/266

12.3.3二進制文件讀寫/267

12.4其他類型的輸入輸出/268

12.4.1字符串流/268

12.4.2文件系統(C++17標準之後)/268

12.4.3同步輸出流(C++20標準之後)/271

12.4.4打印函數(C++23標準之後)/272

習題12/273

第13章標準模板庫和範圍/275

13.1STL介紹 /275

13.2STL容器類/276

13.2.1順序容器/277

13.2.2有序關聯容器/281

13.2.3無序關聯容器/286

13.2.4容器適配器/287

13.2.5容器視圖/287

13.3STL疊代器/290

13.3.1標準疊代器/291

13.3.2流疊代器/293

13.4STL算法/295

13.4.1算法示例——copy和copy_if/295

13.4.2不修改序列的算法(批量操作、查找)/298

13.4.3修改序列的算法/299

13.4.4排序、查找和集合算法/300

13.4.5算法使用案例——學生成績管理系統/301

13.5範圍庫/301

13.5.1範圍的概念和定義/302

13.5.2視圖和可視圖化範圍/304

13.5.3範圍適配器/305

13.5.4受約束算法/309

習題13/311

第14章多線程和協程/314

14.1相關基本概念/314

14.1.1並發/314

14.1.2進程/315

14.1.3線程/315

14.1.4協程/317

14.1.5概念總結/318

14.2線程管理/318

14.2.1創建並啟動線程/318

14.2.2線程的加入和分離/320

14.2.3自動加入(join)的線程(jthread) ——C++20標準/321

14.3協程(C++20標準)/322

習題14/324

參考文獻/325