C++ 編程從入門到實踐, 2/e

王石磊

  • 出版商: 人民郵電
  • 出版日期: 2021-03-01
  • 定價: $594
  • 售價: 8.5$505
  • 語言: 簡體中文
  • 頁數: 380
  • 裝訂: 平裝
  • ISBN: 7115539693
  • ISBN-13: 9787115539694
  • 相關分類: C++ 程式語言
  • 立即出貨

  • C++ 編程從入門到實踐, 2/e-preview-1
  • C++ 編程從入門到實踐, 2/e-preview-2
C++ 編程從入門到實踐, 2/e-preview-1

買這商品的人也買了...

商品描述

本書由淺入深地講解了C++開發技術的核心內容,並通過具體實例演練了各個知識點在實踐中的具體使用方法。全書共23章:第1~2章講解了C++技術的基礎知識,包括C++的重要特性和開發環境搭建;第3~7章分別講解了C++語法、變量、常量、流程控制、運算符和表達式等知識;第8~11章分別講解了輸入、輸出、函數、指針和復合類型的基本知識,包含了C++開發技術的重點和難點;第12~20章分別講解了面向對象、類、繼承、派生、多態、內存管理和異常等內容;第21~23章通過3個綜合實例,介紹了C++技術在綜合項目中的開發流程。全書內容循序漸進,以“範例演練”和“技術解惑”貫穿全書,引領讀者全面掌握C++語言。

本書不但適合C++的初學者,也適合有一定C++基礎的讀者,還可以作為大專院校相關專業師生的學慣用書和培訓學校的教材。

作者簡介

王石磊,著名企業服務器事業部開發工程師,10多年C和C++開發經驗,熟悉驅動開發、系統開發,參與研發了單位的著名的系統開發,這是中國**自主研發的雲數據中心操作系統,深度融合OpenStack,是開放、融合、安全的雲數據中心操作系統,支持最廣泛的異構資源管理和跨雲整合。

目錄大綱

目錄

第1章C++語言介紹1
1.1什麼是C++ 2
1.1.1 C++的發展歷史2
1.1.2 C++的優點和缺點2
1.2 C++語言的現狀3
1.3面向對象4
1.4標準庫介紹4

第2章搭建C++開發環境5
2.1使用Visual C++ 6.0 6
2.1.1 Visual C++ 6.0的特點6
2.1.2安裝Visual C++ 6.0 6
2.2使用Microsoft Visual Studio 9
2.2.1 Visual Studio 2017的新功能9
2.2.2安裝Microsoft VisualStudio 2017 10
2.3編寫第一個C++程序12
2.3.1使用Visual C++ 6 .0實現13
2.3.2使用Visual Studio 2017實現15
2.4使用手機開發C++程序17
2.4.1 GCC和C4droid 18
2.4.2在手機中搭建C++開發環境18
2.4. 3在iPhone中使用Mobile C/C++ 18
2.5技術解惑19
2.5.1初學者經常不知道自己該學什麼19
2.5.2初學者需要知道的正確觀念19
2.6課後練習19

第3章C++語言開發基礎20
3.1面向對象21
3 .1.1兩種對象的產生方式21
3.1.2 C++面向對象編程的流程21
3.2 C++語言的程序結構21
3.2.1初識C++程序結構21
3.2.2看C++程序的文件組織23
3.3 C++編碼規範24
3.3.1養成良好的風格24
3.3.2必須使用的註釋24
3.3.3代碼也需要化妝25
3.4輸入和輸出26
3.4.1標準輸入與輸出對象27
3.4.2一個使用I/O庫的程序27
3.4.3使用using聲明命名空間29
3.5算法30
3.5.1算法的概念30
3.5.2流程圖表示算法31
3.5.3計算機語言表示算法32
3.6技術解惑33
3.6.1 C++是面向對象,C是面向過程,那麼這個對象和過程是什麼意思33
3.6.2面向對象和麵向過程的區別33
3.6.3學好C++的建議34
3.7課後練習34

第4章C++語言的基礎語法35
4.1標識符36
4.1.1 C++中的保留字36
4.1.2標識符的命名規則36
4.2數據類型38
4.2.1數字運算型38
4.2.2邏輯運算型41
4.2.3字符型和字符串42
4.3標準類型庫43
4.3. 1 C++標準庫介紹43
4.3.2標準庫中的主要成員44
4.4技術解惑45
4.4.1 C++的標識符長度的“min-length &&max-information”原則45
4.4 .2字符和字符串的區別45
4.4.3 C++中string類字符串和C中char*/char[]型字符串的差別45
4.4.4 C++字符串和C字符串的轉換45
4.4.5 C++字符串和字符串結束標誌46
4.5課後練習46

第5章變量和常量47
5.1變量48
5.1.1定義變量48
5.1.2聲明變量48
5 .2變量的作用域49
5.2.1作用域和生存期49
5.2.2作用域限定符51
5.2.3存儲類型51
5.2.4 C++變量初始化53
5.3常量54
5.3.1什麼是常量54
5.3.2使用常量55
5.4使用C++ 11標準處理複雜的類型56
5.4.1定義類型別名56
5.4.2使用auto實現類型推導57
5.4.3使用decltype推導類型58
5.4.4使用常量表達式59
5.5技術解惑60
5.5.1 C++常量的命名是否需要遵循一定的規範60
5.5.2在C++程序中用const還是用#define定義常量60
5.5.3 const是個很重要的關鍵字,在使用時應該注意哪些60
5.5.4關於全局變量的初始化,C語言和C++是否有區別61
5.5.5 C/C++變量在內存中的分佈61
5.5.6靜態變量的初始化順序61
5.6課後練習61

第6章運算符和表達式62
6.1運算符和表達式詳解63
6.1.1賦值運算符和賦值表達式63
6.1.2算術運算符和算術表達式64
6.1.3比較運算符和比較表達式66
6.1.4邏輯運算符和邏輯表達式67
6.1.5 ++/運算符和表達式67
6.1.6位運算符和位表達式68
6.1.7求字節數運算符和求字節表達式70
6.1.8條件運算符和條件表達式72
6.1 .9逗號運算符和逗號表達式72
6.1.10運算符的優先級和結合性73
6.2類型轉換76
6.2.1使用隱式轉換76
6.2.2使用顯式轉換77
6.3技術解惑81
6.3.1避免運算結果溢出的一個方案81
6.3.2運算符重載的權衡81
6.3.3運算符重載是對已有運算符賦予多重含義81
6.4課後練習82

第7章流程控制語句83
7.1語句和語句塊84
7.1.1最簡單的語句84
7.1.2語句塊84
7.2順序結構86
7.3選擇結構86
7 .3.1單分支結構語句87
7.3.2雙分支結構語句87
7.3.3使用多分支結構語句90
7.4循環結構詳解91
7.4.1循環語句的形式92
7.4.2 for語句循環92
7.4.3使用while語句94
7.4. 4使用do-while語句95
7.5使用跳轉語句96
7.5.1使用break語句96
7.5.2使用continue語句97
7.5.3使用goto語句97
7.6 C++ 11新規範:基於範圍的for循環語句98
7.7技術解惑99
7.7.1循環中斷的問題99
7.7.2分析循環語句的效率100
7.7.3幾種循環語句的比較100
7.7 .4 C++中的for循環該怎麼讀100
7.7.5一個C++循環結構嵌套的問題100
7.7.6 break語句和continue語句的區別101
7.8課後練習101

第8章指針102
8.1指針的基本概念103
8.2定義指針103
8.2.1定義指針的方式103
8.2.2識別指針104
8.2.3指針的分類104
8.3指針的初始化105
8.3.1指針初始化時的類型106
8.3.2指針地址初始化106
8.3.3變量地址初始化106
8.3.4使用new分配內存單元107
8.3.5使用函數malloc分配內存單元107
8.4指針運算108
8.4.1算術運算108
8.4.2關係運算110
8.5指針的指針112
8.6使用指針113
8.6.1指針賦值114
8.6.2使用“*”操作符114
8.7分析指針和引用的關係115
8.8特殊指針117
8.8.1 void型指針118
8.8.2空指針119
8.8.3 C++ 11:使用nullptr得到空指針120
8.9 C++ 11:使用標準庫函數begin和end 120
8.10技術解惑121
8.10.1指針的命名規範121
8.10.2指針和引用的區別122
8.10. 3變量的實質123
8.10.4避免和解決野指針123
8.10.5常量指針常量和常量引用常量125
8.10.6指針常量和引用常量的對比125
8.10.7常量指針和常量引用的對比125
8.11課後練習126

第9章數組、枚舉、結構體和聯合127
9.1使用數組128
9.1.1定義數組128
9.1 .2高級數組129
9.1.3分析數組的完整性130
9.2動態數組131
9.2.1在堆上分配空間的動態數組131
9.2.2在棧上分配空間的“假動態”數組132
9.3字符數組133
9.3.1定義字符數組133
9.3.2字符數組和字符串指針變量134
9.4數組初始化135
9.4.1定義時的初始化135
9.4 .2初始化賦值語句136
9.5指針和數組137
9.5.1基本原理137
9.5.2指向數組的指針137
9.5.3指針數組138
9.6枚舉139
9.6.1枚舉基礎139
9.6.2使用枚舉140
9.7結構體141
9.7.1定義結構體142
9.7.2指向結構體的指針142
9.7.3使用結構體143
9. 8聯合144
9.9 C++ 11新特性:數組的替代品——array 145
9.10技術解惑146
9.10.1字符數組和字符串的區別146
9.10.2字符數組和字符串可以相互轉換147
9.10.3靜態數組的速度快於動態數組147
9.10.4 Arrays與Vector的區別147
9.10.5一道關於數組的面試題147
9.10.6數組名不是指針149
9.10 .7作為一個用戶自定義類型,其所佔用內存空間是多少149
9.11課後練習150

第10章函數151
10.1函數基礎152
10.1.1定義函數152
10.1.2函數分類153
10.2參數和返回值158
10.2.1什麼是形參實參158
10.2.2使用數組作函數參數159
10.3調用函數160
10.3.1單獨調用160
10.3. 2函數表達式160
10.3.3調用實參161
10.3.4參數傳遞161
10.4函數的基本操作162
10.4.1函數遞歸162
10.4.2指向函數的指針163
10.4.3將函數作為參數164
10.5技術解惑165
10.5.1用typedef定義一個函數指針類型165
10. 5.2 const關鍵字在函數中的作用166
10.5.3 C++函數的內存分配機制167
10.5.4主函數和子函數的關係167
10.5.5函數聲明和函數定義的區別168
10 .5.6使用全局變量的注意事項168
10.5.7使用寄存器變量的注意事項168
10.5.8自動變量的特點169
10.6課後練習169

第11章輸入和輸出170
11.1使用iostream對象171
11.1.1庫iostream的作用171
11.1.2標準的I/O接口171
11.1.3文件I/O 173
11.1.4字符串I/O 174
11.2輸出175
11.2.1預定義類型輸出175
11.2.2自定義類型輸出176
11.3輸入177
11.3.1預定義類型輸入177
11.3.2自定義類型輸入177
11.4輸入/輸出的格式化178
11.4.1使用ios類成員函數179
11.4.2使用操縱函數180
11.5文件操作181
11.5. 1打開和關閉181
11.5.2隨機讀寫183
11.5.3二進製文件184
11.5.4檢測EOF 185
11.6技術解惑187
11.6.1輸入/輸出時數的進制問題187
11.6.2數據間隔187
11.6.3內存文件映射188
11.6.4 get和put的值的差異188
11.6.5使用控制符控制輸出格式188
11.7課後練習189

第12章面向對象的類和對象190
12.1類191
12.1.1聲明類191
12.1.2類的屬性192
12.1.3類的方法192
12.1.4構造函數193
12.1.5析構函數194
12.1.6靜態成員195
12.1.7友元196
12.1.8使用修飾符198
12.2對象199
12.2.1定義對象199
12.2.2對像數組200
12.2.3對象指針201
12.2.4使用this指針201
12.3 C++ 11標準的新變化203
12.3.1定義一個類內初始值203
12.3 .2使用initializer_list處理多個實參204
12.4技術解惑208
12.4.1淺複製和深複製208
12.4.2構造函數的錯誤認識和正確認識209
12.4.3保護性析構函數的作用209
12.5課後練習210

第13章命名空間和作用域211
13.1命名空間基礎212
13.1.1命名空間介紹212
13.1.2定義命名空間212
13.2使用命名空間214
13.2.1使用域限定符214
13.2.2使用using指令215
13.2.3使用using聲明216
13.2.4使用別名216
13.3作用域217
13.3.1與作用域相關的概念217
13.3.2作用域的分類218
13.4技術解惑220
13.4.1 using指令與using聲明的比較220
13.4.2為什麼需要命名空間220
13.4.3命名空間的作用221
13.4.4 C++中頭文件的使用方法222
13.5課後練習222

第14章繼承和派生223
14.1繼承與派生基礎224
14.2 C++的繼承機制224
14.2.1定義繼承224
14.2.2派生類的繼承方式226
14.2.3公有派生和私有派生227
14.3派生類228
14 .3.1使用基類228
14.3.2使用派生228
14.3.3構造函數230
14.3.4析構函數232
14.3.5使用同名函數233
14.3.6使用同名屬性235
14.4單重繼承和多重繼承236
14.4.1單重繼承236
14.4.2多重繼承236
14.4.3多重繼承下的構造函數和析構函數237
14.5虛繼承和虛基類239
14.5.1虛基類介紹240
14.5.2使用虛基類240
14.6技術解惑241
14.6.1通過虛繼承解決二義性問題241
14.6.2使用C++虛基類的注意事項242
14.6.3虛基類的子對象的初始化243
14.6.4允許派生類中的成員名與基類中的成員名相同243
14.7課後練習243

第15章多態244
15.1什麼是多態245
15.2宏多態245
15.3虛函數246
15.3.1虛函數基礎246
15.3.2純虛函數248
15.4抽像類249
15.4. 1什麼是抽像類249
15.4.2抽像類的派生249
15.5運算符重載和函數重載251
15.5.1運算符重載基礎251
15.5.2重載一元運算符251
15.5. 3重載二元運算符252
15.5.4參數類型不同的重載253
15.6流的重載254
15.6.1流插入重載254
15.6.2流提取重載255
15. 7覆蓋257
15.7.1覆蓋函數257
15.7.2覆蓋變量258
15.8技術解惑259
15.8.1重載、覆蓋和隱藏的區別259
15.8.2在重載運算符時要權衡實施的必要性260
15.8.3為什麼需要函數重載260
15.8.4重載函數的調用匹配260
15.8.5另一種虛方法查找方案261
15.8.6兩種重載方法的比較262
15 .9課後練習262

第16章使用模板263
16.1模板基礎264
16.2類模板265
16.2.1什麼是類模板265
16.2.2定義類模板265
16.2.3使用類模板266
16.2.4類模板的派生268
16.2.5類模板和模板類的區別268
16.3函數模板270
16.3.1定義函數模板270
16.3.2使用函數模板271
16 .3.3模板實例化271
16.3.4模板組合273
16.4技術解惑273
16.4.1在函數模板中使用多個類型參數時要避免類型參數的二義性273
16.4 .2函數模板和模板函數的區別274
16.4.3函數模板和類模板的區別274
16.4.4仿函數的用處275
16.5課後練習275

第17章異常處理276
17.1什麼是異常處理277
17.2 C++的異常處理277
17.2.1使用throw拋出異常277
17.2.2使用raise拋出異常279
17.2.3使用try catch異常捕獲279
17 .2.4異常處理中的構造和析構281
17.3 C++的異常處理總結282
17.4技術解惑284
17.4.1編寫軟件的目標284
17.4.2關於C++關鍵字new的異常處理284
17.4.3 C++語言異常處理和結構化異常處理有什麼區別285
17.4.4 C++拋出異常不捕獲,程序的空間會釋放嗎285
17.4.5 throw拋出異常的特點286
17.4.6關於C++異常處理的體會286
17.4.7慎用catch(...) 286
17.4.8慎用繼承體系裡的類作為catch的參數287
17.4.9對象析構函數被調用的3種場合287
17.4.10不要在異常處理體系中寄希望於類型轉換287
17.4.11是否有C++異常處理體系捕獲不到的東西288
17.4.12 set_unexpected函數的用處288
17.4.13不要讓異常逃離析構函數289
17.5課後練習289

第18章內存管理290
18.1內存分類291
18.2棧內存管理291
18 .2.1申請棧內存291
18.2.2使用棧內存292
18.2.3釋放棧內存294
18.2.4改變內存大小294
18.3堆內存管理295
18.3.1申請堆內存295
18.3.2使用堆內存296
18.3.3釋放堆內存296
18.3.4改變內存大小297
18.4技術解惑298
18.4.1堆和棧的區別298
18.4. 2常見的內存錯誤及其對策299
18.4.3防止發生溢出錯誤300
18.5課後練習300

第19章預處理301
19.1預處理基礎302
19.1.1什麼是預處理302
19 .1.2 C++中的預處理302
19.2使用宏時的常見陷阱308
19.3技術解惑309
19.3.1預處理的未來309
19.3.2兩者的意義310
19.3.3一個初學者的問題310
19.4課後練習310

第20章錯誤和調試311
20.1什麼是錯誤312
20.1.1 Bug的由來312
20.1.2程序設計方面的解釋312
20.2常見的錯誤分析312
20.3程序調試常見錯誤317
20.4 C++編程中的調試技巧322
20.4.1調試標記322
20.4. 2運行期間調試標記322
20.4.3把變量和表達式轉換成字符串323
20.4.4 C++語言的assert() 323
20.5技術解惑323
20.5.1編寫規範易懂的代碼323
20.5.2編寫安全可靠的代碼324
20.5.3 Visual C++調試技術326
20.5.4常見的非語法錯誤328

第21章初入江湖——圖書借閱系統的實現過程329
21 .1項目要求330
21.2需求分析330
21.3系統具體實現330
21.3.1數據結構設計331
21.3.2系統主文件rent.cpp 331
21.3.3菜單處理文件mainfunction.h 332
21.3.4函數定義文件subfunction.h 332
21.3.5菜單處理實現文件mainfunction.cpp 333
21.3.6功能函數實現文件subfunction.cpp 337

第22章開始闖關——C++實現網絡應用項目353
22.1項目要求354
22.1.1客戶機/服務器模式介紹354
22.1.2客戶機/服務器模式的運作流程355
22.2實現原理355
22.2.1什麼是Winsocket編程接口355
22.2.2 Winsocket中的函數355
22.3具體實現360
22.3.1客戶端和服務器端的公用文件360
22.3.2實現服務器端363
22.3.3實現客戶端364

第23章開始闖關——C++實現遊戲項目366
23.1計算機遊戲基礎367
23.1.1遊戲的基本流程367
23.1.2遊戲元素367
23. 1.3遊戲層次368
23.2項目分析368
23.2.1遊戲的角色368
23.2.2遊戲界面表現369
23.3具體實現369
23.3.1實現相關位圖369
23.3.2變量與函數369
23.3.3實現全屏371
23.3.4類初始化371
23.3.5實現具體顯示界面372
23.3.6信息提示374
23.3.7與時間段相關的操作374
23.3.8鍵盤操作375
23.3.9我方發射子彈376
23. 3.10敵機出現378
23.3.11敵機發射子彈378
23.3.12敵機子彈移動378
23.3.13火力實現379