21天學通C++ 第8版

21天學通C++ 第8版 pdf epub mobi txt 電子書 下載 2025

[美] 悉達多,饒(Siddhartha Rao) 著,袁國忠 譯
圖書標籤:
  • C++
  • 編程
  • 入門
  • 學習
  • 教程
  • 第8版
  • 21天
  • 計算機
  • 技術
  • 開發
想要找書就要到 新城書站
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!
齣版社: 人民郵電齣版社
ISBN:9787115465887
版次:1
商品編碼:12237658
品牌:異步圖書
包裝:平裝
開本:16開
齣版時間:2017-09-01
用紙:膠版紙
頁數:531
正文語種:中文

具體描述

編輯推薦

適讀人群 :本書可作為初學者學習C++編程技術的教程,也可供已掌握其他語言的程序員學習C++時參考。
  通過閱讀本書,讀者可快速掌握C++的基本知識並學習其中更高級的功能和概念。本書根據C++14標準進行瞭全麵修訂,展望瞭C++17,並從實用的角度詮釋C++語言,幫助讀者學習如何使用它創建速度更快、更簡潔、更高效的C++應用程序。  掌握C++和麵嚮對象編程的基本知識。  理解如何使用lambda錶達式、移動構造函數和賦值運算符等C++功能編寫簡潔、高效的代碼。  學習C++編程的實踐並避開常見的陷阱。  學習標準模闆庫,包括大多數真實C++應用程序都要用到的容器和算法。  使用每章末尾的練習來檢驗對知識的掌握程度。  本書特色:  無需任何編程經驗;  編寫速度更快、功能更強大的C++程序,編譯源代碼並創建可執行文件;  學習封裝、抽象、繼承和多態等麵嚮對象編程概念;  使用標準模闆庫中的算法和容器編寫功能豐富而穩定的C++應用程序;  學習自動類型推斷是如何幫助簡化C++代碼的;  使用lambda錶達式、智能指針和移動構造函數完成復雜的編程工作;  通過嚮編程專傢學習,掌握C++功能;  學習能夠用來編寫齣簡潔且高性能應用程序的C++功能;  展望C++17有望引入的新功能。  讀者可通過www.epubit.com.cn/book/details/4780下載本書源代碼。

內容簡介

  《21天學通C++(第8版)》通過大量短小精悍的程序詳細而全麵地闡述瞭C++基本概念和技術,以及C++11、C++14和C++17新增的功能,包括管理輸入/輸齣、循環和數組、麵嚮對象編程、模闆、使用標準模闆庫、列錶初始化、lambda錶達式、自動類型推斷等。這些內容被組織成結構閤理、聯係緊密的章節,每章都可在1小時內閱讀完畢;每章都提供瞭示例程序清單,並輔以示例輸齣和代碼分析,以闡述該章介紹的主題。為加深讀者對所學內容的理解,每章末尾都提供瞭常見問題及其答案以及練習和測驗。讀者可對照附錄E提供的測驗和練習答案,瞭解自己對所學內容的掌握程度。  《21天學通C++(第8版)》是針對C++初學者編寫的,不要求讀者有C語言方麵的背景知識,可作為高等院校教授C++課程的教材,也可供初學者自學C++時使用。

作者簡介

  Siddhartha Rao是全球領先的企業軟件提供商SAP SE負責安全響應的副總裁。C++的發展讓他深信,您能編寫速度更快、更簡潔、更強大的C++應用程序。Siddhartha酷愛旅遊,還是山地自行車運動的狂熱愛好者;他期待著您對本書的反饋。

目錄

第1章 緒論 1
1.1 C++簡史 1
1.1.1 與C語言的關係 1
1.1.2 C++的優點 1
1.1.3 C++標準的發展曆程 2
1.1.4 哪些人使用C++程序 2
1.2 編寫C++應用程序 2
1.2.1 生成可執行文件的步驟 2
1.2.2 分析並修復錯誤 2
1.2.3 集成開發環境 3
1.2.4 編寫第一個C++應用程序 3
1.2.5 生成並執行第一個C++應用程序 4
1.2.6 理解編譯錯誤 5
1.3 C++新增的功能 5
1.4 總結 5
1.5 問與答 6
1.6 作業 6
1.6.1 測驗 6
1.6.2 練習 6
第2章 C++程序的組成部分 8
2.1 Hello World程序的組成部分 8
2.1.1 預處理器編譯指令#include 9
2.1.2 程序的主體—main( ) 9
2.1.3 返迴值 10
2.2 名稱空間的概念 10
2.3 C++代碼中的注釋 11
2.4 C++函數 12
2.5 使用std::cin和std::cout執行基本輸入
輸齣操作 14
2.6 總結 15
2.7 問與答 15
2.8 作業 15
2.8.1 測驗 16
2.8.2 練習 16
第3章 使用變量和常量 17
3.1 什麼是變量 17
3.1.1 內存和尋址概述 17
3.1.2 聲明變量以訪問和使用內存 17
3.1.3 聲明並初始化多個類型相同的
變量 19
3.1.4 理解變量的作用域 19
3.1.5 全局變量 20
3.1.6 命名約定 22
3.2 編譯器支持的常見C++變量類型 22
3.2.1 使用bool變量存儲布爾值 23
3.2.2 使用char變量存儲字符 23
3.2.3 有符號整數和無符號整數的
概念 24
3.2.4 有符號整型short、int、long和
long long 24
3.2.5 無符號整型unsigned short、unsigned int、unsigned long和unsigned long long 25
3.2.6 選擇正確的數據類型以免發生
溢齣錯誤 25
3.2.7 浮點類型float和double 26
3.3 使用sizeof確定變量的長度 26
3.4 使用auto自動推斷類型 28
3.5 使用typedef替換變量類型 29
3.6 什麼是常量 30
3.6.1 字麵常量 30
3.6.2 使用const將變量聲明為常量 30
3.6.3 使用constexpr定義常量錶達式 31
3.6.4 枚舉 32
3.6.5 使用#define定義常量 34
3.7 不能用作常量或變量名的關鍵字 34
3.8 總結 35
3.9 問與答 36
3.10 作業 37
3.10.1 測驗 37
3.10.2 練習 37
第4章 管理數組和字符串 38
4.1 什麼是數組 38
4.1.1 為何需要數組 38
4.1.2 聲明和初始化靜態數組 39
4.1.3 數組中的數據是如何存儲的 39
4.1.4 訪問存儲在數組中的數據 40
4.1.5 修改存儲在數組中的數據 41
4.2 多維數組 43
4.2.1 聲明和初始化多維數組 44
4.2.2 訪問多維數組中的元素 44
4.3 動態數組 45
4.4 C風格字符串 46
4.5 C++字符串:使用std::string 48
4.6 總結 50
4.7 問與答 50
4.8 作業 50
4.8.1 測驗 51
4.8.2 練習 51
第5章 使用錶達式、語句和運算符 52
5.1 語句 52
5.2 復閤語句(語句塊) 53
5.3 使用運算符 53
5.3.1 賦值運算符(=) 53
5.3.2 理解左值和右值 53
5.3.3 加法運算符(+)、減法運算符( )、乘法運算符(*)、除法運算符(/)和求模運算符(%) 53
5.3.4 遞增運算符(++)和遞減運算符
( ) 54
5.3.5 前綴還是後綴 55
5.3.6 相等運算符(==)和不等運算符
(!=) 56
5.3.7 關係運算符 56
5.3.8 邏輯運算NOT、AND、OR和
XOR 58
5.3.9 使用C++邏輯運算NOT(!)、AND(&&)和OR(||) 59
5.3.10 按位運算符NOT(~)、AND(&)、OR(|)和XOR(^) 63
5.3.11 按位右移運算符(>>)和左移
運算符(<<) 64
5.3.12 復閤賦值運算符 65
5.3.13 使用運算符sizeof確定變量占用
的內存量 67
5.3.14 運算符優先級 68
5.4 總結 69
5.5 問與答 69
5.6 作業 70
5.6.1 測驗 70
5.6.2 練習 70
第6章 控製程序流程 71
6.1 使用if…else有條件地執行 71
6.1.1 使用if…else進行條件編程 72
6.1.2 有條件地執行多條語句 73
6.1.3 嵌套if語句 74
6.1.4 使用switch-case進行條件處理 77
6.1.5 使用運算符 :進行條件處理 80
6.2 在循環中執行代碼 81
6.2.1 不成熟的goto循環 81
6.2.2 while循環 83
6.2.3 do…while循環 84
6.2.4 for循環 86
6.2.5 基於範圍的for循環 88
6.3 使用continue和break修改循環的
行為 90
6.3.1 不結束的循環—無限循環 90
6.3.2 控製無限循環 91
6.4 編寫嵌套循環 93
6.4.1 使用嵌套循環遍曆多維數組 94
6.4.2 使用嵌套循環計算斐波納契
數列 95
6.5 總結 96
6.6 問與答 96
6.7 作業 97
6.7.1 測驗 97
6.7.2 練習 97
第7章 使用函數組織代碼 99
7.1 為何需要函數 99
7.1.1 函數原型是什麼 100
7.1.2 函數定義是什麼 101
7.1.3 函數調用和實參是什麼 101
7.1.4 編寫接受多個參數的函數 101
7.1.5 編寫沒有參數和返迴值的函數 103
7.1.6 帶默認值的函數參數 103
7.1.7 遞歸函數—調用自己的函數 105
7.1.8 包含多條return語句的函數 106
7.2 使用函數處理不同類型的數據 107
7.2.1 函數重載 107
7.2.2 將數組傳遞給函數 109
7.2.3 按引用傳遞參數 110
7.3 微處理器如何處理函數調用 111
7.3.1 內聯函數 112
7.3.2 自動推斷返迴類型 113
7.3.3 lambda函數 114
7.4 總結 115
7.5 問與答 116
7.6 作業 116
7.6.1 測驗 116
7.6.2 練習 116
第8章 闡述指針和引用 118
8.1 什麼是指針 118
8.1.1 聲明指針 119
8.1.2 使用引用運算符(&)獲取變量的
地址 119
8.1.3 使用指針存儲地址 120
8.1.4 使用解除引用運算符(*)訪問
指嚮的數據 122
8.1.5 將sizeof( )用於指針的結果 124
8.2 動態內存分配 125
8.2.1 使用new和delete動態地分配和
釋放內存 125
8.2.2 將遞增和遞減運算符(++和 )
用於指針的結果 127
8.2.3 將關鍵字const用於指針 129
8.2.4 將指針傳遞給函數 130
8.2.5 數組和指針的類似之處 131
8.3 使用指針時常犯的編程錯誤 133
8.3.1 內存泄露 133
8.3.2 指針指嚮無效的內存單元 133
8.3.3 懸浮指針(也叫迷途或失控
指針) 134
8.3.4 檢查使用new發齣的分配請求是否得到滿足 135
8.4 指針編程最佳實踐 137
8.5 引用是什麼 137
8.5.1 是什麼讓引用很有用 138
8.5.2 將關鍵字const用於引用 139
8.5.3 按引用嚮函數傳遞參數 140
8.6 總結 140
8.7 問與答 141
8.8 作業 142
8.8.1 測驗 142
8.8.2 練習 142
第9章 類和對象 144
9.1 類和對象 144
9.1.1 聲明類 145
9.1.2 作為類實例的對象 145
9.1.3 使用句點運算符訪問成員 146
9.1.4 使用指針運算符(->)訪問成員 146
9.2 關鍵字public和private 147
9.3 構造函數 150
9.3.1 聲明和實現構造函數 150
9.3.2 何時及如何使用構造函數 151
9.3.3 重載構造函數 152
9.3.4 沒有默認構造函數的類 154
9.3.5 帶默認值的構造函數參數 155
9.3.6 包含初始化列錶的構造函數 156
9.4 析構函數 157
9.4.1 聲明和實現析構函數 157
9.4.2 何時及如何使用析構函數 158
9.5 復製構造函數 160
9.5.1 淺復製及其存在的問題 160
9.5.2 使用復製構造函數確保深復製 162
9.5.3 有助於改善性能的移動構造
函數 166
9.6 構造函數和析構函數的其他用途 166
9.6.1 不允許復製的類 167
9.6.2 隻能有一個實例的單例類 167
9.6.3 禁止在棧中實例化的類 169
9.6.4 使用構造函數進行類型轉換 171
9.7 this指針 172
9.8 將sizeof( )用於類 173
9.9 結構不同於類的地方 175
9.10 聲明友元 176
9.11 共用體:一種特殊的數據存儲
機製 178
9.11.1 聲明共用體 178
9.11.2 在什麼情況下使用共用體 178
9.12 對類和結構使用聚閤初始化 180
9.13 總結 183
9.14 問與答 183
9.15 作業 184
9.15.1 測驗 184
9.15.2 練習 184
第10章 實現繼承 185
10.1 繼承基礎 185
10.1.1 繼承和派生 186
10.1.2 C++派生語法 186
10.1.3 訪問限定符protected 188
10.1.4 基類初始化—嚮基類傳遞
參數 190
10.1.5 在派生類中覆蓋基類的方法 192
10.1.6 調用基類中被覆蓋的方法 194
10.1.7 在派生類中調用基類的方法 194
10.1.8 在派生類中隱藏基類的方法 196
10.1.9 構造順序 198
10.1.10 析構順序 198
10.2 私有繼承 200
10.3 保護繼承 202
10.4 切除問題 205
10.5 多繼承 205
10.6 使用final禁止繼承 207
10.7 總結 208
10.8 問與答 208
10.9 作業 208
10.9.1 測驗 208
10.9.2 練習 209
第11章 多態 210
11.1 多態基礎 210
11.1.1 為何需要多態行為 210
11.1.2 使用虛函數實現多態行為 212
11.1.3 為何需要虛構造函數 213
11.1.4 虛函數的工作原理—理解
虛函數錶 217
11.1.5 抽象基類和純虛函數 220
11.2 使用虛繼承解決菱形問題 222
11.3 錶明覆蓋意圖的限定符override 225
11.4 使用final來禁止覆蓋函數 226
11.5 可將復製構造函數聲明為虛函數嗎 227
11.6 總結 230
11.7 問與答 230
11.8 作業 231
11.8.1 測驗 231
11.8.2 練習 231
第12章 運算符類型與運算符重載 232
12.1 C++運算符 232
12.2 單目運算符 233
12.2.1 單目運算符的類型 233
12.2.2 單目遞增與單目遞減運算符 234
12.2.3 轉換運算符 236
12.2.4 解除引用運算符(*)和成員選擇
運算符(->) 238
12.3 雙目運算符 239
12.3.1 雙目運算符的類型 240
12.3.2 雙目加法與雙目減法運算符 240
12.3.3 實現運算符+=與 = 242
12.3.4 重載等於運算符(==)和不等運算
符(!=) 243
12.3.5 重載運算符<、>、<=和>= 245
12.3.6 重載復製賦值運算符(=) 248
12.3.7 下標運算符 250
12.4 函數運算符operator() 253
12.5 用於高性能編程的移動構造函數和
移動賦值運算符 254
12.5.1 不必要的復製帶來的問題 254
12.5.2 聲明移動構造函數和移動賦值
運算符 254
12.6 用戶定義的字麵量 258
12.7 不能重載的運算符 260
12.8 總結 261
12.9 問與答 261
12.10 作業 261
12.10.1 測驗 261
12.10.2 練習 261
第13章 類型轉換運算符 262
13.1 為何需要類型轉換 262
13.2 為何有些C++程序員不喜歡C風格
類型轉換 263
13.3 C++類型轉換運算符 263
13.3.1 使用static_cast 263
13.3.2 使用dynamic_cast和運行階段
類型識彆 264
13.3.3 使用reinterpret_cast 267
13.3.4 使用const_cast 267
13.4 C++類型轉換運算符存在的問題 268
13.5 總結 269
13.6 問與答 269
13.7 作業 270
13.7.1 測驗 270
13.7.2 練習 270
第14章 宏和模闆簡介 271
14.1 預處理器與編譯器 271
14.2 使用#define定義常量 271
14.3 使用#define編寫宏函數 274
14.3.1 為什麼要使用括號 276
14.3.2 使用assert宏驗證錶達式 276
14.3.3 使用宏函數的優點和缺點 277
14.4 模闆簡介 278
14.4.1 模闆聲明語法 278
14.4.2 各種類型的模闆聲明 279
14.4.3 模闆函數 279
14.4.4 模闆與類型安全 281
14.4.5 模闆類 281
14.4.6 聲明包含多個參數的模闆 282
14.4.7 聲明包含默認參數的模闆 283
14.4.8 一個模闆示例 283
14.4.9 模闆的實例化和具體化 284
14.4.10 模闆類和靜態成員 286
14.4.11 參數數量可變的模闆 287
14.4.12 使用static_assert執行編譯階段
檢查 290
14.4.13 在實際C++編程中使用模闆 290
14.5 總結 291
14.6 問與答 291
14.7 作業 291
14.7.1 測驗 291
14.7.2 練習 292
第15章 標準模闆庫簡介 293
15.1 STL容器 293
15.1.1 順序容器 293
15.1.2 關聯容器 294
15.1.3 容器適配器 294
15.2 STL迭代器 295
15.3 STL算法 295
15.4 使用迭代器在容器和算法之間交互 295
15.5 選擇正確的容器 297
15.6 STL字符串類 298
15.7 總結 298
15.8 問與答 299
15.9 作業 299
第16章 STL string類 300
16.1 為何需要字符串操作類 300
16.2 使用STL string類 301
16.2.1 實例化和復製STL string 301
16.2.2 訪問std::string的字符內容 303
16.2.3 拼接字符串 305
16.2.4 在string中查找字符或
子字符串 306
16.2.5 截短STL string 307
16.2.6 字符串反轉 309
16.2.7 字符串的大小寫轉換 310
16.3 基於模闆的STL string實現 311
16.4 總結 312
16.5 問與答 312
16.6 作業 313
16.6.1 測驗 313
16.6.2 練習 313
第17章 STL動態數組類 314
17.1 std::vector的特點 314
17.2 典型的vector操作 314
17.2.1 實例化vector 314
17.2.2 使用push_back( )在末尾插入
元素 316
17.2.3 列錶初始化 317
17.2.4 使用insert( )在指定位置插入
元素 317
17.2.5 使用數組語法訪問vector中的
元素 319
17.2.6 使用指針語法訪問vector中的
元素 320
17.2.7 刪除vector中的元素 321
17.3 理解大小和容量 322
17.4 STL deque 類 324
17.5 總結 326
17.6 問與答 326
17.7 作業 327
17.7.1 測驗 327
17.7.2 練習 327
第18章 STL list和forward_list 328
18.1 std::list的特點 328
18.2 基本的list操作 328
18.2.1 實例化std::list對象 328
18.2.2 在list開頭或末尾插入元素 330
18.2.3 在list中間插入元素 331
18.2.4 刪除list中的元素 333
18.3 對list中的元素進行反轉和排序 334
18.3.1 使用list::reverse( )反轉元素的
排列順序 334
18.3.2 對元素進行排序 335
18.3.3 對包含對象的list進行排序以及
刪除其中的元素 337
18.3.4 C++11引入的std::forward_list 340
18.4 總結 341
18.5 問與答 342
18.6 作業 342
18.6.1 測驗 342
18.6.2 練習 342
第19章 STL集閤類 343
19.1 簡介 343
19.2 STL set和multiset的基本操作 344
19.2.1 實例化std::set對象 344
19.2.2 在set或multiset中插入元素 345
19.2.3 在STL set或multiset中查找
元素 347
19.2.4 刪除STL set或multiset中的
元素 348
19.3 使用STL set和multiset的優缺點 352
19.4 總結 354
19.5 問與答 355
19.6 作業 355
19.6.1 測驗 355
19.6.2 練習 355
第20章 STL映射類 356
20.1 STL映射類簡介 356
20.2 STL map和multimap的基本操作 357
20.2.1 實例化std::map和
std::multimap 357
20.2.2 在STL map或multimap中插入
元素 358
20.2.3 在STL map或multimap中查找
元素 361
20.2.4 在STL multimap中查找元素 363
20.2.5 刪除STL map或multimap中的
元素 363
20.3 提供自定義的排序謂詞 365
20.4 基於散列錶的STL鍵-值對容器 368
20.4.1 散列錶的工作原理 368
20.4.2 使用unordered_map和unordered_
multimap 368
20.5 總結 372
20.6 問與答 372
20.7 作業 372
20.7.1 測驗 373
20.7.2 練習 373
第21章 理解函數對象 374
21.1 函數對象與謂詞的概念 374
21.2 函數對象的典型用途 374
21.2.1 一元函數 374
21.2.2 一元謂詞 378
21.2.3 二元函數 380
21.2.4 二元謂詞 381
21.3 總結 383
21.4 問與答 384
21.5 作業 384
21.5.1 測驗 384
21.5.2 練習 384
第22章 lambda錶達式 385
22.1 lambda錶達式是什麼 385
22.2 如何定義lambda錶達式 386
22.3 一元函數對應的lambda錶達式 386
22.4 一元謂詞對應的lambda錶達式 387
22.5 通過捕獲列錶接受狀態變量的lambda
錶達式 388
22.6 lambda錶達式的通用語法 390
22.7 二元函數對應的lambda錶達式 391
22.8 二元謂詞對應的lambda錶達式 392
22.9 總結 394
22.10 問與答 394
22.11 作業 395
22.11.1 測驗 395
22.11.2 練習 395
第23章 STL算法 396
23.1 什麼是STL算法 396
23.2 STL算法的分類 396
23.2.1 非變序算法 396
23.2.2 變序算法 397
23.3 使用STL算法 398
23.3.1 根據值或條件查找元素 398
23.3.2 計算包含給定值或滿足給定條件的
元素數 400
23.3.3 在集閤中搜索元素或序列 401
23.3.4 將容器中的元素初始化為
指定值 403
23.3.5 使用std::generate( )將元素設置為
運行階段生成的值 405
23.3.6 使用for_each( )處理指定範圍內的
元素 406
23.3.7 使用std::transform( )對範圍進行
變換 407
23.3.8 復製和刪除操作 409
23.3.9 替換值以及替換滿足給定條件的
元素 412
23.3.10 排序、在有序集閤中搜索以及刪除
重復元素 413
23.3.11 將範圍分區 415
23.3.12 在有序集閤中插入元素 417
23.4 總結 419
23.5 問與答 419
23.6 作業 419
23.6.1 測驗 420
23.6.2 練習 420
第24章 自適應容器:棧和隊列 421
24.1 棧和隊列的行為特徵 421
24.1.1 棧 421
24.1.2 隊列 422
24.2 使用STL stack類 422
24.2.1 實例化stack 422
24.2.2 stack的成員函數 423
24.2.3 使用push( )和pop( )在棧頂插入和
刪除元素 424
24.3 使用STL queue類 425
24.3.1 實例化queue 425
24.3.2 queue的成員函數 426
24.3.3 使用push( )在隊尾插入以及使用
pop( )從隊首刪除 427
24.4 使用STL優先級隊列 428
24.4.1 實例化priority_queue類 428
24.4.2 priority_queue的成員
函數 429
24.4.3 使用push( )在priority_queue末尾
插入以及使用pop( )在priority_queue
開頭刪除 430
24.5 總結 432
24.6 問與答 432
24.7 作業 432
24.7.1 測驗 432
24.7.2 練習 432
第25章 使用STL位標誌 433
25.1 bitset類 433
25.2 使用std::bitset及其成員 434
25.2.1 std:bitset的運算符 434
25.2.2 std::bitset的成員方法 435
25.3 vector 437
25.3.1 實例化vector 437
25.3.2 vector的成員函數和
運算符 438
25.4 總結 439
25.5 問與答 439
25.6 作業 439
25.6.1 測驗 439
25.6.2 練習 440
第26章 理解智能指針 441
26.1 什麼是智能指針 441
26.1.1 常規(原始)指針存在的
問題 441
26.1.2 智能指針有何幫助 442
26.2 智能指針是如何實現的 442
26.3 智能指針類型 443
26.3.1 深復製 443
26.3.2 寫時復製機製 445
26.3.3 引用計數智能指針 445
26.3.4 引用鏈接智能指針 445
26.3.5 破壞性復製 445
26.3.6 使用std::unique_ptr 447
26.4 深受歡迎的智能指針庫 449
26.5 總結 449
26.6 問與答 449
26.7 作業 450
26.7.1 測試 450
26.7.2 練習 450
第27章 使用流進行輸入和輸齣 451
27.1 流的概述 451
27.2 重要的C++流類和流
對象 452
27.3 使用std::cout將指定格式的數據
寫入控製颱 453
27.3.1 使用std::cout修改數字的顯示
格式 453
27.3.2 使用std::cout對齊文本和設置
字段寬度 455
27.4 使用std::cin進行輸入 455
27.4.1 使用std::cin將輸入讀取到基本
類型變量中 455
27.4.2 使用std::cin:get將輸入讀取到char*
緩衝區中 456
27.4.3 使用std::cin將輸入讀取到
std::string中 457
27.5 使用std::fstream處理文件 458
27.5.1 使用open( )和close( )打開和關閉
文件 459
27.5.2 使用open( )創建文本文件並使用
運算符<<寫入文本 460
27.5.3 使用open( )和運算符>>讀取文本
文件 460
27.5.4 讀寫二進製文件 461
27.6 使用std::stringstream對字符串進行
轉換 463
27.7 總結 464
27.8 問與答 464
27.9 作業 465
27.9.1 測驗 465
27.9.2 練習 465
第28章 異常處理 466
28.1 什麼是異常 466
28.2 導緻異常的原因 466
28.3 使用try和catch捕獲異常 467
28.3.1 使用catch(…)處理所有
異常 467
28.3.2 捕獲特定類型的異常 468
28.3.3 使用throw引發特定類型的
異常 469
28.4 異常處理的工作原理 470
28.4.1 std::exception類 472
28.4.2 從std::exception派生齣自定義
異常類 473
28.5 總結 474
28.6 問與答 474
28.7 作業 475
28.7.1 測驗 475
28.7.2 練習 475
第29章 繼續前行 477
29.1 當今的處理器有何不同 477
29.2 如何更好地利用多個內核 478
29.2.1 綫程是什麼 478
29.2.2 為何要編寫多綫程應用
程序 479
29.2.3 綫程如何交換數據 479
29.2.4 使用互斥量和信號量同步
綫程 480
29.2.5 多綫程技術帶來的問題 480
29.3 編寫傑齣的C++代碼 480
29.4 C++17有望引入的新特性 481
29.4.1 支持在if和switch中進行
初始化 481
29.4.2 保證復製得以避免 482
29.4.3 避免內存分配開銷的
std::string_view 482
29.4.4 類型安全的共用體替代品
std::variant 483
29.4.5 使用if constexpr有條件地編譯
代碼 483
29.4.6 改進的lambda錶達式 484
29.4.7 在構造函數中使用類型自動推斷
功能 484
29.5 更深入地學習C++ 484
29.5.1 在綫文檔 485
29.5.2 提供指南和幫助的社區 485
29.6 總結 485
29.7 問與答 485
29.8 作業 485
附錄A 二進製和十六進製 486
A.1 十進製 486
A.2 二進製 486
A.2.1 計算機為何使用二進製 487
A.2.2 位和字節 487
A.2.3 1KB相當於多少字節 487
A.3 十六進製 487
A.4 不同進製之間的轉換 488
A.4.1 通用轉換步驟 488
A.4.2 從十進製轉換為二進製 488
A.4.3 從十進製轉換為十六進製 489
附錄B C++關鍵字 490
附錄C 運算符優先級 491
附錄D ASCII碼 492
附錄E 答案 495
《C++ 編程精要:從基礎到實踐》 內容簡介 本書旨在為讀者提供一套係統、全麵且實用的 C++ 編程學習路徑,幫助讀者從零開始掌握 C++ 的核心概念,並將其應用於實際的項目開發中。我們不拘泥於單一的教科書模式,而是通過深入淺齣的講解、精選的示例代碼以及循序漸進的練習,引導讀者逐步建立對 C++ 語言的深刻理解和靈活運用能力。本書內容設計緊密結閤現代 C++ 的發展趨勢,強調良好的編程實踐和高效的開發技巧。 第一部分:C++ 基礎與核心概念 本部分將為讀者奠定堅實的 C++ 編程基礎。我們將從最基本的程序結構入手,逐步深入到 C++ 的核心要素。 初識 C++: C++ 的曆史與發展: 簡要介紹 C++ 作為一門麵嚮對象、通用程序設計語言的演變過程,以及它在軟件開發領域的地位和影響力。 開發環境搭建: 指導讀者選擇並安裝適閤的 C++ 集成開發環境(IDE),如 Visual Studio, CLion, VS Code 等,並完成第一個簡單的“Hello, World!”程序,熟悉編譯、鏈接和運行的基本流程。 基本程序結構: 講解 C++ 程序的組織方式,包括預處理指令、函數(如 `main` 函數)、語句、錶達式和注釋。 變量與數據類型: 深入理解 C++ 中的基本數據類型(整型、浮點型、字符型、布爾型)及其存儲特性。學習如何聲明、初始化和使用變量,以及不同類型之間的隱式和顯式轉換。 運算符與錶達式: 詳細介紹算術運算符、關係運算符、邏輯運算符、位運算符、賦值運算符以及逗號運算符。講解運算符的優先級和結閤性,並演示如何構建復雜的錶達式。 流程控製: 條件語句: 學習 `if`、`else`、`else if` 語句,理解條件判斷在程序分支控製中的作用。掌握 `switch` 語句,用於處理多重選擇。 循環語句: 講解 `for` 循環、`while` 循環和 `do-while` 循環,理解它們在重復執行代碼塊方麵的差異和應用場景。學習 `break` 和 `continue` 語句,用於控製循環的執行。 跳轉語句: 介紹 `goto` 語句(謹慎使用),以及其在特定場景下的應用。 函數: 函數定義與調用: 學習如何定義函數,包括函數返迴值類型、函數名、參數列錶。理解函數調用的過程,以及參數傳遞(傳值和傳引用)的區彆。 函數重載: 掌握函數重載的概念,允許在同一作用域內定義多個同名但參數列錶不同的函數,提高代碼的靈活性。 作用域與生命周期: 理解局部變量、全局變量和靜態變量的作用域和生命周期,以及它們對程序行為的影響。 遞歸: 介紹遞歸函數的設計思想和實現方法,以及其在解決特定問題時的優勢和注意事項(如棧溢齣)。 指針與內存管理: 指針概念: 深入理解指針的本質,即存儲內存地址的變量。學習如何聲明、初始化和解引用指針。 指針運算: 掌握指針的算術運算,如指針加減整數,以及它們在數組操作中的應用。 動態內存分配: 使用 `new` 和 `delete` 操作符進行堆內存的動態分配和釋放,理解其重要性以及防止內存泄漏的機製。 數組與指針: 闡述數組名與指針的關係,以及如何使用指針遍曆數組。 指嚮指針的指針: 學習多級指針的概念,以及在復雜數據結構中的應用。 數組與字符串: 一維數組: 學習數組的聲明、初始化和訪問。 多維數組: 理解二維及以上數組的結構和操作。 C 風格字符串: 介紹以 null 終止符 (``) 結尾的字符數組,以及常用的字符串處理函數(如 `strcpy`, `strcat`, `strcmp`, `strlen`)。 C++ 字符串類(`std::string`): 詳細講解 `std::string` 類的強大功能,包括字符串的拼接、查找、替換、子串提取等,以及其內存管理的優勢。 第二部分:麵嚮對象編程 (OOP) 思想與 C++ 實現 本部分將引導讀者掌握 C++ 的核心麵嚮對象特性,這是 C++ 強大之處的關鍵。 類與對象: 類的概念: 理解類是創建對象的藍圖,它封裝瞭數據(成員變量)和行為(成員函數)。 對象的創建與使用: 學習如何創建類的對象,並通過對象訪問其成員。 訪問修飾符: 掌握 `public`, `private`, `protected` 訪問修飾符的作用,實現數據的封裝和信息隱藏。 構造函數與析構函數: 學習構造函數的概念,它在對象創建時自動調用,用於初始化對象。理解析構函數的作用,它在對象銷毀時自動調用,用於清理資源。 this 指針: 理解 `this` 指針指嚮當前對象,常用於在成員函數中引用對象本身。 拷貝構造函數與拷貝賦值運算符: 學習深拷貝和淺拷貝的概念,以及如何正確實現拷貝構造函數和拷貝賦值運算符,避免數據冗餘和錯誤。 繼承: 繼承的概念: 理解繼承是實現代碼復用和建立類之間層次關係的重要機製。 派生類與基類: 學習如何定義派生類,從基類繼承成員。 訪問權限的繼承: 分析 `public`, `protected`, `private` 成員在繼承中的可見性。 繼承方式: 掌握公有繼承、保護繼承和私有繼承的區彆。 多重繼承: 介紹多重繼承的概念,以及可能帶來的菱形繼承問題和解決方案。 多態: 多態的概念: 理解多態允許使用基類指針或引用指嚮不同派生類對象,並在運行時調用各自的方法。 虛函數: 學習如何聲明虛函數,以及它們如何在運行時實現動態綁定。 純虛函數與抽象類: 掌握純虛函數的概念,以及如何創建抽象類,強製派生類實現特定接口。 虛析構函數: 理解為什麼在基類中聲明虛析構函數對於正確清理派生類對象至關重要。 運算符重載: 運算符重載的意義: 學習如何為用戶自定義類型賦予已有的運算符新的含義,使代碼更直觀易讀。 成員函數與友元函數重載: 掌握通過成員函數或友元函數實現運算符重載的方法。 常用運算符重載示例: 演示如何重載算術運算符、關係運算符、輸入/輸齣運算符等。 第三部分:C++ 高級特性與實踐應用 本部分將深入探討 C++ 的高級特性,並結閤實際項目,展示 C++ 的強大能力。 模闆: 函數模闆: 學習如何編寫函數模闆,實現代碼的通用化,適用於不同數據類型。 類模闆: 掌握類模闆的定義,用於創建泛型的類,如容器類。 模闆的特例化與偏特例化: 瞭解如何為特定類型提供模闆的定製實現。 異常處理: 異常的概念: 理解異常是程序運行時發生的異常事件。 `try-catch-throw` 機製: 學習如何使用 `try` 塊捕獲可能發生的異常,使用 `throw` 拋齣異常,以及使用 `catch` 塊處理不同類型的異常。 異常的傳播: 理解異常如何在函數調用棧中傳播。 標準異常類: 介紹 C++ 標準庫提供的常見異常類,如 `std::runtime_error`, `std::logic_error` 等。 輸入/輸齣流(I/O Streams): 流的概念: 理解 C++ I/O 流模型,包括輸入流 (`cin`) 和輸齣流 (`cout`)。 流對象與操縱符: 學習使用 `<<` 和 `>>` 操作符進行數據輸入輸齣。掌握 `endl`, `fixed`, `setw`, `setprecision` 等流操縱符,控製輸齣格式。 文件 I/O: 學習使用 `fstream` 類進行文件的讀寫操作,包括文本文件和二進製文件。 流的狀態: 理解流的錯誤狀態,如 `failbit`, `badbit`, `eofbit`。 STL (Standard Template Library): STL 概覽: 介紹 STL 的核心組件,包括容器、算法和迭代器。 常用容器: 深入學習 `std::vector`(動態數組)、`std::list`(雙嚮鏈錶)、`std::deque`(雙端隊列)、`std::set`(有序集閤)、`std::map`(鍵值對映射)等。 迭代器: 理解迭代器作為訪問容器元素的通用接口。 常用算法: 學習 STL 提供的排序、查找、遍曆、拷貝等算法,如 `std::sort`, `std::find`, `std::copy`。 現代 C++ 特性(C++11 及以後): 智能指針(`std::unique_ptr`, `std::shared_ptr`, `std::weak_ptr`): 學習如何使用智能指針自動管理內存,避免內存泄漏。 Lambda 錶達式: 掌握 Lambda 錶達式的語法和應用,實現匿名函數,簡化代碼。 範圍 `for` 循環: 學習更簡潔的遍曆容器元素的方式。 `auto` 類型推導: 利用 `auto` 關鍵字簡化變量聲明。 移動語義(Rvalue References and Move Semantics): 探討高效的資源轉移機製,優化性能。 第四部分:項目實踐與進階 實戰項目: 通過若乾小型的綜閤性項目,將前麵學到的知識融會貫通。例如,可以實現一個簡單的學生管理係統、文本編輯器、圖形界麵應用(使用第三方庫)等。 調試技巧: 介紹常用的調試工具和方法,幫助讀者定位和解決程序中的錯誤。 代碼規範與重構: 強調編寫清晰、可讀性強的代碼的重要性,並介紹代碼重構的原則和技巧。 性能優化: 探討 C++ 程序性能優化的常見方法和注意事項。 麵嚮 C++ 工程師的下一步: 為讀者指明繼續深入學習的方嚮,如並發編程、網絡編程、圖形學、遊戲開發、嵌入式開發等。 本書特色: 循序漸進: 從最基礎的概念開始,逐步深入到復雜的主題,確保讀者能夠輕鬆掌握。 強調實踐: 大量精選的示例代碼,均可直接運行,幫助讀者理解抽象概念。 注重理解: 深入剖析 C++ 背後的原理,而不僅僅是語法知識。 緊跟潮流: 涵蓋瞭現代 C++ 的重要特性,為讀者掌握最新的開發技術打下基礎。 實用性強: 旨在培養讀者獨立解決問題的能力,並將所學知識應用於實際項目。 無論您是初次接觸編程,還是希望係統地提升 C++ 技能,《C++ 編程精要:從基礎到實踐》都將是您不可多得的學習夥伴。通過本書的學習,您將能夠自信地編寫齣高效、健壯、可維護的 C++ 程序。

用戶評價

評分

如果用一個詞來形容我的閱讀體驗,那就是“毫不拖泥帶水”。我不是計算機科學科班齣身,很多教科書裏動輒幾頁的理論鋪墊能把我看得昏昏欲睡,而這本書則像是一個經驗豐富的工程師在傳授秘籍,直奔主題。它的排版和視覺呈現也功不可沒,代碼塊的顔色區分、關鍵概念的粗體強調,都讓閱讀過程保持高度的專注度。我特彆贊賞它對C++標準庫(STL)的介紹方式。很多書把STL寫得像一個龐大而神秘的工具箱,讓人無從下手。而這本書采取瞭模塊化分解策略,先介紹`vector`和`string`這種最常用的容器,然後循序漸進地引入迭代器和算法。通過大量的內聯注釋和步驟解析,我不再害怕那些復雜的迭代器語法瞭。它成功地將C++這門以嚴謹著稱的語言,變得易於消化和吸收,就像把一道復雜的數學題,用最簡潔明瞭的公式一步步推導齣來。這讓我在學習過程中極少需要翻閱外部資料來輔助理解,極大地提升瞭學習效率。

評分

說實話,我之前嘗試過好幾本號稱“快速入門”的C++書籍,結果都是半途而廢,因為它們要麼過於注重曆史背景和標準演變,要麼就是代碼示例陳舊得像古董。但《21天學通C++ 第8版》給我的感覺完全不同,它似乎完全站在現代C++開發者的角度來構建知識體係。第八版的優勢顯而易見,它沒有迴避C++11、14乃至更新標準帶來的便利,比如`auto`關鍵字的引入,智能指針的應用等,這些都是現代項目開發的標配。這本書的實戰導嚮性極強,幾乎每一章後麵都配有精心設計的“小項目”或“實踐挑戰”。我記得在學習文件I/O那部分時,書中提供瞭一個構建小型日誌係統的例子,它引導你不僅要學會讀寫文件,還要考慮異常處理和資源釋放的健壯性。這種“學完一個知識點,立刻用它來解決一個實際問題”的循環,極大地鞏固瞭我的知識。它不是在教你如何應付考試,而是在教你如何成為一個閤格的、能寫齣整潔、高效代碼的程序員。特彆是對於那些想要轉行或者需要在短期內掌握C++核心技能的職場人士來說,這本書的結構設計簡直就是一本“戰術手冊”。

評分

這本《21天學通C++ 第8版》絕對是為我們這些對編程充滿熱情,但又常常被C++的復雜性嚇倒的“時間緊張型”學習者量身定做的。我尤其欣賞它那種近乎“軍事化”的時間管理和內容編排。它不像那種動輒幾百頁、堆砌晦澀理論的傳統教材,而是將C++的核心概念像樂高積木一樣拆解得非常清晰。第一周,你會感覺自己像個探險傢,剛接觸指針和內存管理這種讓人生畏的概念,但作者的講解方式極其平易近人,大量使用生活中的比喻來解釋那些抽象的內存地址和引用。等到瞭第二周,你開始接觸麵嚮對象編程(OOP)的精髓,類、繼承、多態這些聽起來高大上的詞匯,被分解成瞭可以實際操作的小模塊。最讓我感到驚喜的是,它沒有僅僅停留在語法層麵,而是非常注重“為什麼”要這樣設計。例如,在講解模闆時,它不僅展示瞭如何使用,還深入剖析瞭模闆在泛型編程中解決代碼冗餘的強大能力。每天的學習任務都設計得恰到好處,既有足夠的挑戰性讓你保持專注,又不會因為內容過多而産生挫敗感,仿佛有一個耐心的私人導師在你身邊,一步步引導你度過C++學習的“死亡之榖”。這是一種非常高效、目標明確的學習路徑,讓你在兩周多的時間裏,從一個C++小白,蛻變成一個能夠自信地構建中小型應用程序的初級開發者。

評分

這本書的配套資源和學習節奏感,是我認為它區彆於其他同類書籍的關鍵所在。我注意到作者在設計21天的學習周期時,似乎對編程學習者的“遺忘麯綫”做過深入研究。它不是平均分配內容的,而是將最需要反復練習的“指針、引用”和“繼承/多態”放在瞭學習周期的前中期,並通過後續章節的不斷調用來加深記憶。更妙的是,在每周末的“階段性復習”部分,它提供瞭一個綜閤性的、包含前一周所有核心知識點的小項目。比如,在第三周的收尾,你需要整閤類設計、文件操作和基本的異常處理來構建一個簡易的學生管理係統。這種“學、練、測、復習”的閉環設計,極大地避免瞭“學瞭後麵忘瞭前麵”的尷尬局麵。對於像我這樣需要平衡工作和學習的人來說,這種結構化的壓力和反饋機製,是保證我能堅持下來的重要動力。它不是強迫你“記住”,而是通過重復和應用,讓你“內化”瞭這些編程範式。

評分

這本書給我的最大啓發在於,它成功地將“快速入門”與“係統性學習”這兩個看似矛盾的目標統一起來瞭。很多人擔心快速入門的書會犧牲深度,導緻基礎不牢。但《21天學通C++ 第8版》在保證速度的同時,對C++的底層機製保持瞭相當的尊重和深度闡述。例如,在講解麵嚮對象編程的高級特性時,它沒有僅僅停留在語法糖的層麵,而是深入探討瞭虛函數錶(vtable)的實現原理,這對於理解運行時多態至關重要。這部分內容,在很多入門書中是直接跳過的“深水區”。但作者在這裏的處理非常巧妙,先用一個簡單的例子讓你看到多態的效果,然後再用一個清晰的圖示解釋背後的機製,讓你在理解其強大功能的同時,也對內存布局有瞭初步的概念。這種循序漸進、由淺入深的處理方式,讓我覺得這不僅是一本速成手冊,更是一本為未來深入學習C++打下堅實理論基礎的優秀引路書。它讓你在21天內不僅學會瞭“怎麼做”,更明白瞭“為什麼是這樣”。

評分

&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;

評分

多次購買。

評分

此用戶未填寫評價內容

評分

使用很實用,很實用講的非常清楚。

評分

還ub錯,看起來很超值,值得購買

評分

不錯啊,保證質量,下次再來,全五分好評,

評分

通俗易懂

評分

講述的十分完整,方方麵麵麵俱到

評分

想要快速上手買的書。內容挺多,看看能否21天學完

相關圖書

本站所有內容均為互聯網搜尋引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度google,bing,sogou

© 2025 book.cndgn.com All Rights Reserved. 新城书站 版權所有