C高級編程

C高級編程

《C高級編程》是2019年4月1日清華大學出版社出版的圖書,作者是[美] 馬克·葛瑞格爾 。

基本介紹

  • 中文名:C高級編程
  • 作者:[美] 馬克·葛瑞格爾
  • 出版社:清華大學出版社
  • ISBN:9787302526315
內容簡介,圖書目錄,

內容簡介

·展現C++思考方式,以便充分利用該語言中影響深遠的功能來開發高效的解決方案。
·闡釋鮮為人知的元素,披露避開常見陷阱的技巧,分享提示、技巧和方案,以幫助提高工作效率和軟體性能。
·列出富有挑戰、貼近實用、具有多種用途的代碼段,可根據需要將這些代碼段移植到任何項目中。
·濃墨重彩地描述C++17的新功能,如結構化綁定、嵌套的名稱空間和constexpr if等。
·深入討論C++17新的標準庫功能,比如string_view、optional類、並行算法和檔案系統API等。

圖書目錄

第 I 部分 專業的C++簡介
第1 章 C++和標準庫速成 2
1.1 C++基礎知識 2
1.1.1 小程式“hello world” 3
1.1.2 名稱空間 .5
1.1.3 字面量 6
1.1.4 變數 7
1.1.5 運算符 8
1.1.6 類型 10
1.1.7 條件語句 12
1.1.8 邏輯比較運算符 14
1.1.9 函式 15
1.1.10 C風格的數組 16
1.1.11 std::array 17
1.1.12 std::vector 17
1.1.13 結構化綁定 18
1.1.14 循環 18
1.1.15 初始化列表 19
1.1.16 這些都是基礎 19
1.2 深入研究C++ 20
1.2.1 C++中的字元串 20
1.2.2 指針和動態記憶體 20
1.2.3 const的多種用法 24
1.2.4 引用 24
1.2.5 異常 25
1.2.6 類型推斷 26
1.3 作為面向對象語言的C++ 27
1.3.1 定義類 27
1.3.2 使用類 29
1.4 統一初始化 29
1.5 標準庫 31
1.6 第一個有用的C++程式 31
1.6.1 雇員記錄系統 32
1.6.2 Employee類 32
1.6.3 Database類 34
1.6.4 用戶界面 36
1.6.5 評估程式 38
1.7 本章小結 38
第2 章 使用string 和string_view 39
2.1 動態字元串 39
2.1.1 C風格的字元串 39
2.1.2 字元串字面量 41
2.1.3 C++ std::string類 42
2.1.4 std::string_view類 46
2.1.5 非標準字元串 47
2.2 本章小結 47
第3 章 編碼風格 48
3.1 良好外觀的重要性 48
3.1.1 事先考慮 48
3.1.2 良好風格的元素 49
3.2 為代碼編寫文檔 49
3.2.1 使用注釋的原因 49
3.2.2 注釋的風格 52
3.3 分解 55
3.3.1 通過重構分解 56
3.3.2 通過設計來分解 56
3.3.3 本書中的分解 56
3.4 命名 56
3.4.1 選擇恰當的名稱 57
3.4.2 命名約定 57
3.5 使用具有風格的語言特性 59
3.5.1 使用常量 59
3.5.2 使用引用代替指針 59
3.5.3 使用自定義異常 59
3.6 格式 60
3.6.1 關於大括弧對齊的爭論 60
3.6.2 關於空格和圓括弧的爭論 61
3.6.3 空格和制表符 61
3.7 風格的挑戰 61
3.8 本章小結 62
第 II 部分 專業的C++軟體設計
第4 章 設計專業的C++程式 64
4.1 程式設計概述 64
4.2 程式設計的重要性 65
4.3 C++設計的特點 66
4.4 C++設計的兩個原則 67
4.4.1 抽象 67
4.4.2 重用 68
4.5 重用代碼 69
4.5.1 關於術語的說明 69
4.5.2 決定是否重用代碼 70
4.5.3 重用代碼的策略 71
4.5.4 綁定第三方應用程式 74
4.5.5 開放原始碼庫 75
4.5.6 C++標準庫 76
4.6 設計一個西洋棋程式 76
4.6.1 需求 76
4.6.2 設計步驟 77
4.7 本章小結 80
第5 章 面向對象設計 82
5.1 過程化的思考方式 82
5.2 面向對象思想 83
5.2.1 類 83
5.2.2 組件 83
5.2.3 屬性 83
5.2.4 行為 84
5.2.5 綜合考慮 84
5.3 生活在對象世界裡 85
5.3.1 過度使用對象 85
5.3.2 過於通用的對象 85
5.4 對象之間的關係 86
5.4.1 “有一個”關係 86
5.4.2 “是一個”關係(繼承) 87
5.4.3 “有一個”與“是一個”的區別 88
5.4.4 not-a關係 90
5.4.5 層次結構 91
5.4.6 多重繼承 91
5.4.7 混入類 92
5.5 抽象 93
5.5.1 接口與實現 93
5.5.2 決定公開的接口 93
5.5.3 設計成功的抽象 94
5.6 本章小結 95
第6 章 設計可重用代碼 96
6.1 重用哲學 96
6.2 如何設計可重用代碼 97
6.2.1 使用抽象 97
6.2.2 構建理想的重用代碼 98
6.2.3 設計有用的接口 102
6.2.4 SOLID原則 106
6.3 本章小結 106
第 III 部分 專業的C++編碼方法
第7 章 記憶體管理 108
7.1 使用動態記憶體 108
7.1.1 如何描繪記憶體 109
7.1.2 分配和釋放 110
7.1.3 數組 111
7.1.4 使用指針 116
7.2 數組-指針的對偶性 117
7.2.1 數組就是指針 117
7.2.2 並非所有指針都是數組 119
7.3 低級記憶體操作 119
7.3.1 指針運算 119
7.3.2 自定義記憶體管理 120
7.3.3 垃圾回收 120
7.3.4 對象池 121
7.4 智慧型指針 121
7.4.1 unique_ptr 122
7.4.2 shared_ptr 124
7.4.3 weak_ptr 125
7.4.4 移動語義 126
7.4.5 enable_shared_from_this 127
7.4.6 舊的、過時的/取消的auto_ptr 127
7.5 常見的記憶體陷阱 127
7.5.1 分配不足的字元串 127
7.5.2 訪問記憶體越界 128
7.5.3 記憶體泄漏 128
7.5.4 雙重刪除和無效指針 131
7.6 本章小結 131
第8 章 熟悉類和對象 132
8.1 電子表格示例介紹 132
8.2 編寫類 133
8.2.1 類定義 133
8.2.2 定義方法 135
8.2.3 使用對象 137
8.3 對象的生命周期 138
8.3.1 創建對象 138
8.3.2 銷毀對象 149
8.3.3 對象賦值 149
8.3.4 編譯器生成的複製構造函式和複製賦值運算符 151
8.3.5 複製和賦值的區別 151
8.4 本章小結 153
第9 章 精通類與對象 154
9.1 友元 154
9.2 對象的動態記憶體分配 155
9.2.1 Spreadsheet類 155
9.2.2 使用析構函式釋放記憶體 157
9.2.3 處理複製和賦值 158
9.2.4 使用移動語義處理移動 162
9.2.5 零規則 167
9.3 與方法有關的更多內容 167
9.3.1 靜態方法 167
9.3.2 const方法 168
9.3.3 方法重載 169
9.3.4 內聯方法 170
9.3.5 默認參數 171
9.4 不同的數據成員類型 172
9.4.1 靜態數據成員 172
9.4.2 靜態常量數據成員 173
9.4.3 引用數據成員 174
9.4.4 常量引用數據成員 175
9.5 嵌套類 175
9.6 類內的枚舉類型 176
9.7 運算符重載 177
9.7.1 示例:為SpreadsheetCell實現加法 177
9.7.2 重載算術運算符 179
9.7.3 重載比較運算符 181
9.7.4 創建具有運算符重載的類型 181
9.8 創建穩定的接口 182
9.9 本章小結 184
第10 章 揭秘繼承技術 185
10.1 使用繼承構建類 185
10.1.1 擴展類 186
10.1.2 重寫方法 188
10.2 使用繼承重用代碼 194
10.2.1 WeatherPrediction類 194
10.2.2 在派生類中添加功能 195
10.2.3 在派生類中替換功能 196
10.3 利用父類 196
10.3.1 父類構造函式 196
10.3.2 父類的析構函式 197
10.3.3 使用父類方法 198
10.3.4 向上轉型和向下轉型 200
10.4 繼承與多態性 201
10.4.1 回到電子表格 201
10.4.2 設計多態性的電子表格單元格 201
10.4.3 SpreadsheetCell基類 202
10.4.4 獨立的派生類 203
10.4.5 利用多態性 204
10.4.6 考慮將來 205
10.5 多重繼承 206
10.5.1 從多個類繼承 206
10.5.2 名稱衝突和歧義基類 207
10.6 有趣而晦澀的繼承問題 209
10.6.1 修改重寫方法的特徵 209
10.6.2 繼承的構造函式 211
10.6.3 重寫方法時的特殊情況 214
10.6.4 派生類中的複製構造函式和賦值運算符 219
10.6.5 運行時類型工具 220
10.6.6 非public繼承 221
10.6.7 虛基類 221
10.7 本章小結 222
第11 章 理解靈活而奇特的C++ 223
11.1 引用 223
11.1.1 引用變數 224
11.1.2 引用數據成員 225
11.1.3 引用參數 225
11.1.4 將引用作為返回值 226
11.1.5 右值引用 226
11.1.6 使用引用還是指針 227
11.2 關鍵字的疑問 229
11.2.1 const關鍵字 229
11.2.2 static關鍵字 232
11.2.3 非局部變數的初始化順序 235
11.2.4 非局部變數的銷毀順序 235
11.3 類型和類型轉換 235
11.3.1 類型別名 235
11.3.2 函式指針的類型別名 236
11.3.3 方法和數據成員的指針的類型別名 238
11.3.4 typedef 238
11.3.5 類型轉換 239
11.4 作用域解析 242
11.5 特性 243
11.5.1 [[noreturn]]特性 243
11.5.2 [[deprecated]]特性 244
11.5.3 [[fallthrough]]特性 244
11.5.4 [[nodiscard]]特性 244
11.5.5 [[maybe_unused]]特性 244
11.5.6 供應商專用特性 245
11.6 用戶定義的字面量 245
11.7 頭檔案 246
11.8 C 的實用工具 247
11.8.1 變長參數列表 247

相關詞條

熱門詞條

聯絡我們