定 價(jià):¥138.00
作 者: | (美)馬克·葛瑞格爾 |
出版社: | 清華大學(xué)出版社 |
叢編項(xiàng): | |
標(biāo) 簽: | 暫缺 |
ISBN: | 9787302526315 | 出版時(shí)間: | 2019-04-01 | 包裝: | 平裝 |
開本: | 16開 | 頁數(shù): | 字?jǐn)?shù): |
第 I 部分 專業(yè)的C++簡介
第1 章 C++和標(biāo)準(zhǔn)庫速成 2
1.1 C++基礎(chǔ)知識 2
1.1.1 小程序“hello world” 3
1.1.2 名稱空間 .5
1.1.3 字面量 6
1.1.4 變量 7
1.1.5 運(yùn)算符 8
1.1.6 類型 10
1.1.7 條件語句 12
1.1.8 邏輯比較運(yùn)算符 14
1.1.9 函數(shù) 15
1.1.10 C風(fēng)格的數(shù)組 16
1.1.11 std::array 17
1.1.12 std::vector 17
1.1.13 結(jié)構(gòu)化綁定 18
1.1.14 循環(huán) 18
1.1.15 初始化列表 19
1.1.16 這些都是基礎(chǔ) 19
1.2 深入研究C++ 20
1.2.1 C++中的字符串 20
1.2.2 指針和動(dòng)態(tài)內(nèi)存 20
1.2.3 const的多種用法 24
1.2.4 引用 24
1.2.5 異常 25
1.2.6 類型推斷 26
1.3 作為面向?qū)ο笳Z言的C++ 27
1.3.1 定義類 27
1.3.2 使用類 29
1.4 統(tǒng)一初始化 29
1.5 標(biāo)準(zhǔn)庫 31
1.6 第一個(gè)有用的C++程序 31
1.6.1 雇員記錄系統(tǒng) 32
1.6.2 Employee類 32
1.6.3 Database類 34
1.6.4 用戶界面 36
1.6.5 評估程序 38
1.7 本章小結(jié) 38
第2 章 使用string 和string_view 39
2.1 動(dòng)態(tài)字符串 39
2.1.1 C風(fēng)格的字符串 39
2.1.2 字符串字面量 41
2.1.3 C++ std::string類 42
2.1.4 std::string_view類 46
2.1.5 非標(biāo)準(zhǔn)字符串 47
2.2 本章小結(jié) 47
第3 章 編碼風(fēng)格 48
3.1 良好外觀的重要性 48
3.1.1 事先考慮 48
3.1.2 良好風(fēng)格的元素 49
3.2 為代碼編寫文檔 49
3.2.1 使用注釋的原因 49
3.2.2 注釋的風(fēng)格 52
3.3 分解 55
3.3.1 通過重構(gòu)分解 56
3.3.2 通過設(shè)計(jì)來分解 56
3.3.3 本書中的分解 56
3.4 命名 56
3.4.1 選擇恰當(dāng)?shù)拿Q 57
3.4.2 命名約定 57
3.5 使用具有風(fēng)格的語言特性 59
3.5.1 使用常量 59
3.5.2 使用引用代替指針 59
3.5.3 使用自定義異常 59
3.6 格式 60
3.6.1 關(guān)于大括號對齊的爭論 60
3.6.2 關(guān)于空格和圓括號的爭論 61
3.6.3 空格和制表符 61
3.7 風(fēng)格的挑戰(zhàn) 61
3.8 本章小結(jié) 62
第 II 部分 專業(yè)的C++軟件設(shè)計(jì)
第4 章 設(shè)計(jì)專業(yè)的C++程序 64
4.1 程序設(shè)計(jì)概述 64
4.2 程序設(shè)計(jì)的重要性 65
4.3 C++設(shè)計(jì)的特點(diǎn) 66
4.4 C++設(shè)計(jì)的兩個(gè)原則 67
4.4.1 抽象 67
4.4.2 重用 68
4.5 重用代碼 69
4.5.1 關(guān)于術(shù)語的說明 69
4.5.2 決定是否重用代碼 70
4.5.3 重用代碼的策略 71
4.5.4 綁定第三方應(yīng)用程序 74
4.5.5 開放源代碼庫 75
4.5.6 C++標(biāo)準(zhǔn)庫 76
4.6 設(shè)計(jì)一個(gè)國際象棋程序 76
4.6.1 需求 76
4.6.2 設(shè)計(jì)步驟 77
4.7 本章小結(jié) 80
第5 章 面向?qū)ο笤O(shè)計(jì) 82
5.1 過程化的思考方式 82
5.2 面向?qū)ο笏枷?nbsp; 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 對象之間的關(guān)系 86
5.4.1 “有一個(gè)”關(guān)系 86
5.4.2 “是一個(gè)”關(guān)系(繼承) 87
5.4.3 “有一個(gè)”與“是一個(gè)”的區(qū)別 88
5.4.4 not-a關(guān)系 90
5.4.5 層次結(jié)構(gòu) 91
5.4.6 多重繼承 91
5.4.7 混入類 92
5.5 抽象 93
5.5.1 接口與實(shí)現(xiàn) 93
5.5.2 決定公開的接口 93
5.5.3 設(shè)計(jì)成功的抽象 94
5.6 本章小結(jié) 95
第6 章 設(shè)計(jì)可重用代碼 96
6.1 重用哲學(xué) 96
6.2 如何設(shè)計(jì)可重用代碼 97
6.2.1 使用抽象 97
6.2.2 構(gòu)建理想的重用代碼 98
6.2.3 設(shè)計(jì)有用的接口 102
6.2.4 SOLID原則 106
6.3 本章小結(jié) 106
第 III 部分 專業(yè)的C++編碼方法
第7 章 內(nèi)存管理 108
7.1 使用動(dòng)態(tài)內(nèi)存 108
7.1.1 如何描繪內(nèi)存 109
7.1.2 分配和釋放 110
7.1.3 數(shù)組 111
7.1.4 使用指針 116
7.2 數(shù)組-指針的對偶性 117
7.2.1 數(shù)組就是指針 117
7.2.2 并非所有指針都是數(shù)組 119
7.3 低級內(nèi)存操作 119
7.3.1 指針運(yùn)算 119
7.3.2 自定義內(nèi)存管理 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 移動(dòng)語義 126
7.4.5 enable_shared_from_this 127
7.4.6 舊的、過時(shí)的/取消的auto_ptr 127
7.5 常見的內(nèi)存陷阱 127
7.5.1 分配不足的字符串 127
7.5.2 訪問內(nèi)存越界 128
7.5.3 內(nèi)存泄漏 128
7.5.4 雙重刪除和無效指針 131
7.6 本章小結(jié) 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 創(chuàng)建對象 138
8.3.2 銷毀對象 149
8.3.3 對象賦值 149
8.3.4 編譯器生成的復(fù)制構(gòu)造函數(shù)和復(fù)制賦值運(yùn)算符 151
8.3.5 復(fù)制和賦值的區(qū)別 151
8.4 本章小結(jié) 153
第9 章 精通類與對象 154
9.1 友元 154
9.2 對象的動(dòng)態(tài)內(nèi)存分配 155
9.2.1 Spreadsheet類 155
9.2.2 使用析構(gòu)函數(shù)釋放內(nèi)存 157
9.2.3 處理復(fù)制和賦值 158
9.2.4 使用移動(dòng)語義處理移動(dòng) 162
9.2.5 零規(guī)則 167
9.3 與方法有關(guān)的更多內(nèi)容 167
9.3.1 靜態(tài)方法 167
9.3.2 const方法 168
9.3.3 方法重載 169
9.3.4 內(nèi)聯(lián)方法 170
9.3.5 默認(rèn)參數(shù) 171
9.4 不同的數(shù)據(jù)成員類型 172
9.4.1 靜態(tài)數(shù)據(jù)成員 172
9.4.2 靜態(tài)常量數(shù)據(jù)成員 173
9.4.3 引用數(shù)據(jù)成員 174
9.4.4 常量引用數(shù)據(jù)成員 175
9.5 嵌套類 175
9.6 類內(nèi)的枚舉類型 176
9.7 運(yùn)算符重載 177
9.7.1 示例:為SpreadsheetCell實(shí)現(xiàn)加法 177
9.7.2 重載算術(shù)運(yùn)算符 179
9.7.3 重載比較運(yùn)算符 181
9.7.4 創(chuàng)建具有運(yùn)算符重載的類型 181
9.8 創(chuàng)建穩(wěn)定的接口 182
9.9 本章小結(jié) 184
第10 章 揭秘繼承技術(shù) 185
10.1 使用繼承構(gòu)建類 185
10.1.1 擴(kuò)展類 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 父類構(gòu)造函數(shù) 196
10.3.2 父類的析構(gòu)函數(shù) 197
10.3.3 使用父類方法 198
10.3.4 向上轉(zhuǎn)型和向下轉(zhuǎn)型 200
10.4 繼承與多態(tài)性 201
10.4.1 回到電子表格 201
10.4.2 設(shè)計(jì)多態(tài)性的電子表格單元格 201
10.4.3 SpreadsheetCell基類 202
10.4.4 獨(dú)立的派生類 203
10.4.5 利用多態(tài)性 204
10.4.6 考慮將來 205
10.5 多重繼承 206
10.5.1 從多個(gè)類繼承 206
10.5.2 名稱沖突和歧義基類 207
10.6 有趣而晦澀的繼承問題 209
10.6.1 修改重寫方法的特征 209
10.6.2 繼承的構(gòu)造函數(shù) 211
10.6.3 重寫方法時(shí)的特殊情況 214
10.6.4 派生類中的復(fù)制構(gòu)造函數(shù)和賦值運(yùn)算符 219
10.6.5 運(yùn)行時(shí)類型工具 220
10.6.6 非public繼承 221
10.6.7 虛基類 221
10.7 本章小結(jié) 222
第11 章 理解靈活而奇特的C++ 223
11.1 引用 223
11.1.1 引用變量 224
11.1.2 引用數(shù)據(jù)成員 225
11.1.3 引用參數(shù) 225
11.1.4 將引用作為返回值 226
11.1.5 右值引用 226
11.1.6 使用引用還是指針 227
11.2 關(guān)鍵字的疑問 229
11.2.1 const關(guān)鍵字 229
11.2.2 static關(guān)鍵字 232
11.2.3 非局部變量的初始化順序 235
11.2.4 非局部變量的銷毀順序 235
11.3 類型和類型轉(zhuǎn)換 235
11.3.1 類型別名 235
11.3.2 函數(shù)指針的類型別名 236
11.3.3 方法和數(shù)據(jù)成員的指針的類型別名 238
11.3.4 typedef 238
11.3.5 類型轉(zhuǎn)換 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 供應(yīng)商專用特性 245
11.6 用戶定義的字面量 245
11.7 頭文件 246
11.8 C 的實(shí)用工具 247
11.8.1 變長參數(shù)列表 247