編輯推薦
適讀人群 :本書可作為初學者學習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 模闆類
21天學通C++ 第8版 下載 mobi epub pdf txt 電子書