C++ 程序設計精要教程

馬光誌

  • 出版商: 人民郵電
  • 出版日期: 2026-03-01
  • 定價: $419
  • 售價: $418
  • 語言: 簡體中文
  • 頁數: 338
  • ISBN: 7115545766
  • ISBN-13: 9787115545763
  • 相關分類: C++ 程式語言
  • 下單後立即進貨 (約4週~6週)

  • C++ 程序設計精要教程-preview-1
C++ 程序設計精要教程-preview-1

商品描述

本書結合C++程序,簡要介紹了匯編語言,並以棧和隊列為主線,逐步深入面向對象的概念。本書從面向過程轉向面向對象的編程開始,接著引入類、內聯、線程、異常、虛函數、運算符重載、移動語義等概念實現棧和隊列,然後基於繼承和聚合等概念通過雙棧模擬隊列,最後引入類模板、類型轉換、類型推導等概念實現棧和隊列,深入細致地介紹了ISO/IEC 14882:2017標準的全部語法。

為了培養學生面向對象的建模能力,書中按照面向對象的分析與設計步驟,完整展示了骰子遊戲的建模過程,並用C++進行了面向對象的程序設計。全書通過挖掘C++概念的應用背景,提供了可供運行的有趣實例和習題。

作者簡介

馬光誌,湖北鐘祥人,博士,副教授。先後在美國North Illinois University、Kennesaw State University培訓及訪問。主要研究方向為人工智能、圖像處理、深度學習,曾在國際期刊發表SCI論文20篇、國際會議發表論文10篇。主持與參加了近30個研究開發項目,包括國家自然科學基金、省自然科學基金、國家863及973、國家重大研發計劃、中英國際合作及中加國際合作項目,以及與醫學圖像、醫院信息、衛生監管等相關的多個研究開發項目。曾參加C語言至8086匯編語言編譯器的研究與開發項目,出版與C++及匯編語言相關的教材3部。

目錄大綱

第1章 C++引論

1.1 計算機的體系結構 1

1.1.1 計算機系統的結構 1

1.1.2 數據與程序的存儲方式 3

1.2 進制及其轉換和運算 4

1.2.1 計算機采用二進制的原因 5

1.2.2 C++的常用進制及其運算 5

1.3 80X86系列匯編語言 7

1.3.1 匯編語言及C++編譯簡介 7

1.3.2 匯編指令及C++程序編譯 9

1.4 C++的發展歷史及特點 12

1.4.1 C++的發展歷史 12

1.4.2 C++的特點 12

1.5 語法圖與程序流程圖 13

1.5.1 C++的語法圖 13

1.5.2 程序流程圖 15

1.6 編譯環境的安裝與使用 16

1.6.1 編譯過程及編譯環境 16

1.6.2 Microsoft Visual Studio 2019的安裝 17

練習題 22

 

第2章 類型、常量及變量

2.1 C++的單詞 23

2.1.1 C++的字符集 23

2.1.2 C++的關鍵字 24

2.2 預定義類型及值域和常量 25

2.2.1 預定義類型及其數值轉換 25

2.2.2 強制類型轉換及類型值域 26

2.2.3 預定義類型及相關常量 28

2.3 變量及其類型解析 31

2.3.1 變量的說明和定義 31

2.3.2 指針及其類型理解 34

2.3.3 有址引用變量 40

2.3.4 無址引用變量 45

2.3.5 元素、下標及數組 47

2.4 運算符及表達式 49

2.4.1 位運算與等號運算 49

2.4.2 指針運算及其結合方向 50

2.4.3 關系運算及結果轉換 51

2.5 結構與聯合 52

2.5.1 結構體 52

2.5.2 聯合體 54

練習題 56

 

第3章 語句、函數及程序設計

3.1 C++的語句 58

3.1.1 簡單語句 58

3.1.2 轉移語句 59

3.1.3 分支語句 60

3.1.4 循環語句 63

3.1.5 break和continue語句 67

3.1.6 asm和static_assert語句 68

3.2 C++的函數 68

3.2.1 函數說明與定義 69

3.2.2 頭文件與說明 70

3.2.3 函數的參數說明 72

3.2.4 函數重載 74

3.2.5 inline及constexpr函數 75

3.2.6 線程互斥及線程本地變量 77

3.3 作用域 79

3.3.1 全局作用域與模塊作用域 79

3.3.2 局部作用域與塊作用域 81

3.4 生命期 82

3.5 程序設計實例 84

3.5.1 棧編程實例 84

3.5.2 隊列編程實例 86

3.5.3 有限自動機編程實例 87

練習題 90

 

第4章 C++的類

4.1 類的聲明及定義 92

4.1.1 面向對象的基本概念 92

4.1.2 類及對象定義的實例 93

4.2 成員訪問權限及突破方法 97

4.2.1 成員的訪問權限 97

4.2.2 突破成員的訪問權限 98

4.3 內聯、匿名類及位段 99

4.3.1 函數成員的內聯 99

4.3.2 無對象的匿名聯合 101

4.3.3 局部類及位段成員 102

4.4 new和delete運算符 103

4.4.1 簡單類型及單個對象內存管理 103

4.4.2 復雜類型及對象數組內存管理 105

4.5 隱含參數this 107

4.6 對象的構造與析構 109

4.6.1 構造函數及對象初始化 109

4.6.2 成員默認值及構造與析構 110

4.7 類及對象的內存布局 112

練習題 116

 

第5章 成員及成員指針

5.1 實例成員指針 117

5.1.1 實例成員指針的用法 117

5.1.2 實例成員指針的限制 118

5.2 const、volatile和mutable 119

5.2.1 const和volatile的用法 119

5.2.2 mutable實例數據成員 123

5.3 靜態數據成員 124

5.3.1 靜態數據成員的用法 124

5.3.2 靜態數據成員的限制 126

5.4 靜態函數成員 128

5.4.1 靜態函數成員的訪問 128

5.4.2 靜態函數成員的限制 129

5.5 靜態成員指針 130

5.5.1 靜態成員指針的用法 130

5.5.2 多種指針的混合用法 131

5.6 聯合的成員指針 132

練習題 133

 

第6章 繼承與構造

6.1 單繼承類 136

6.2 繼承方式 138

6.2.1 繼承後成員的訪問權限 138

6.2.2 訪問權限的修改 141

6.3 成員訪問 142

6.4 構造與析構 143

6.4.1 對象構造的執行順序 143

6.4.2 new、delete引起的構造與析構 144

6.5 父類和子類 145

6.5.1 父類及其函數調用 145

6.5.2 友元和派生類函數中的父子類

關系 147

6.6 派生類的內存布局 148

練習題 149

 

第7章 可訪問性

7.1 作用域 152

7.1.1 面向對象的作用域 152

7.1.2 面向過程的作用域 155

7.2 名字空間 156

7.2.1 名字空間的基本用法 156

7.2.2 使用名字空間的註意事項 158

7.3 成員友元 160

7.3.1 成員友元的一般用法 161

7.3.2 互為依賴的類的友元 162

7.4 普通友元及其註意事項 163

7.4.1 普通友元的一般用法 163

7.4.2 友元使用的註意事項 165

7.5 覆蓋與隱藏 167

7.5.1 覆蓋與隱藏的用法 167

7.5.2 使用using避免成員覆蓋 169

練習題 170

 

第8章 多態與虛函數

8.1 虛函數 174

8.1.1 虛函數的聲明及定義 174

8.1.2 虛函數的重載及內聯 176

8.2 虛析構函數 179

8.3 類的引用 180

8.3.1 類的引用變量及其析構 181

8.3.2 類的引用參數及其析構 183

8.4 抽象類 186

8.4.1 抽象類的定義及用法 186

8.4.2 抽象類的應用實例 187

8.5 虛函數友元與晚期綁定 189

8.5.1 虛函數作為友元 190

8.5.2 虛函數的晚期綁定 191

8.6 有虛函數時的內存布局 192

8.6.1 基類有虛函數時的內存布局 192

8.6.2 基類無虛函數時的內存布局 193

練習題 194

 

第9章 多繼承與虛基類

9.1 多繼承類 196

9.1.1 無多繼承的替代方案 196

9.1.2 多繼承存在的問題 197

9.2 虛基類 198

9.3 派生類成員 200

9.3.1 無虛基類時的成員同名 200

9.3.2 有虛基類時的成員同名 201

9.4 單重及多重繼承的構造與析構 202

9.4.1 單繼承的構造與析構 202

9.4.2 多繼承的構造與析構 204

9.5 多繼承類的內存布局 205

9.5.1 無虛基類時的內存布局 205

9.5.2 有虛基類時的內存布局 207

練習題 209

 

第10章 異常與斷言

10.1 異常處理 212

10.1.1 拋出與捕獲 212

10.1.2 異常的傳播 213

10.2 捕獲順序 214

10.3 函數的異常接口 216

10.3.1 異常接口聲明 216

10.3.2 noexcept接口 217

10.4 異常類型 219

10.5 異常對象的析構 220

10.5.1 通過對象指針析構 220

10.5.2 未完成對象的析構 221

10.6 斷言 223

練習題 224

 

第11章 運算符重載

11.1 運算符概述 225

11.1.1 結果為左值的運算符 225

11.1.2 運算符重載的分類 226

11.1.3 成員與非成員重載 227

11.2 運算符參數 228

11.2.1 自增與自減的重載 228

11.2.2 重載->運算符 230

11.2.3 單雙目運算符的重載 231

11.3 賦值與調用 232

11.3.1 賦值運算符的重載 232

11.3.2 構造函數的重載 233

11.3.3 安全的編程方法 235

11.4 強制類型轉換 236

11.4.1 單個顯式參數構造函數 236

11.4.2 強制類型轉換重載函數 237

11.5 重載new和delete 238

11.6 運算符重載實例 240

11.6.1 符號表運算的重載實例 240

11.6.2 棧及隊列運算重載實例 241

練習題 244

 

第12章 類型解析、轉換與推導

12.1 隱式與顯式類型轉換 250

12.1.1 簡單類型的隱式轉換 250

12.1.2 簡單類型的顯式轉換 252

12.1.3 簡單類型的轉換結果 253

12.2 cast系列類型轉換 256

12.2.1 static_cast——靜態轉換 256

12.2.2 const_cast——只讀轉換 257

12.2.3 dynamic_cast——動態轉換 260

12.2.4 reinterpret_cast——重釋轉換 263

12.3 類型轉換實例 265

12.3.1 typeid獲取類型標識 265

12.3.2 explicit要求顯式調用 267

12.3.3 棧的類型轉換實例 268

12.4 自動類型推導 270

12.4.1 auto的一般用法 271

12.4.2 auto用於函數和數組 271

12.4.3 表達式類型的提取 272

12.5 Lambda表達式 273

12.5.1 Lambda表達式的聲明 273

12.5.2 Lambda表達式的參數 275

12.5.3 準函數Lambda表達式 278

練習題 279

 

第13章 模板與內存回收

13.1 變量模板及其實例 280

13.1.1 變量模板的定義 280

13.1.2 變量模板的實例化 281

13.2 函數模板 282

13.2.1 函數模板的定義 282

13.2.2 成員函數模板的定義 283

13.2.3 函數模板的參數 284

13.3 函數模板實例化 285

13.3.1 函數模板強制實例化 285

13.3.2 函數模板實例特化 286

13.3.3 涉及指針的模板實例化 287

13.4 類模板 288

13.4.1 類模板的定義 288

13.4.2 派生類類模板的定義 289

13.4.3 多類型參數的類模板 290

13.4.4 省略參數的類模板 290

13.4.5 類模板的友元及Lambda表達式 292

13.5 類模板的實例化及特化 294

13.5.1 類模板的實例化 294

13.5.2 類模板實例特化 294

13.5.3 類模板的部分特化 296

13.5.4 實例化與類型推導 297

13.5.5 類模板及實例成員指針 298

13.5.6 模板分隔符的二義性 299

13.5.7 類模板與泛型 300

13.6 內存回收實例 303

練習題 305

 

第14章 流及類庫

14.1 流類概述 307

14.2 輸出流 308

14.3 輸入流 311

14.4 文件流 312

14.5 串流處理 314

練習題 315

 

第15章 面向對象開發實例

15.1 面向對象設計概述 316

15.2 對象的靜態模型 317

15.3 面向對象的分析 319

15.4 對象的設計與實現 320

15.5 骰子遊戲模型設計實例 322

15.5.1 問題描述 322

15.5.2 對象模型 322

15.5.3 對象設計 324

15.6 遊戲模型程序設計 326

練習題 331

 

參考文獻 338