C++程序設計基礎(第2版)
內容描述
本書基於新的C++標準,從程序設計基礎知識開始,系統地介紹C++語言的基本概念、語法規則和編程技術,使讀者能夠利用C++語言描述現實世界中的問題及其解決方法。本書力求以較為精練的語言,並按照由淺入深、循序漸進、前後貫通的原則,對每部分的知識點和難點,用精選大量例題進行講解。本書採用發散性思維方法,對相關知識進行擴展,意在開闊視野,培養編程興趣,使讀者在循序漸進中提高編程能力。 本書可作為高等院校電腦程序設計相關課程的教材或教學參考書,也可作為程序設計人員的培訓或自學參考用書。本書有配套的線上課程,適合開展線上課程的教學活動。
目錄大綱
第1章程序設計基礎知識1
1.1計算機中數的表示與編碼1
1.1.1進位計數制2
1.1.2二進制數的編碼表示4
1.1.3常用的信息編碼6
1.2程序設計及程序設計語言7
1.3算法及算法表示8
1.4程序設計方法10
1.4.1結構化程序設計10
1.4.2面向對象程序設計11
1.5小結與知識擴展12
1.5.1小結12
1.5.2計算機中常用存儲單位及其換算13
習題13
第2章C++簡單程序設計15
2.1C++程序的基本結構和要素16
2.1.1一個簡單的C++程序16
2.1.2字符集17
2.1.3詞法記號17
2.1.4註釋18
2.2基本數據類型和數據19
2.2.1基本數據類型20
2.2.2常量21
2.2.3變量和引用25
2.3運算符與表達式27
2.3.1算術表達式28
2.3.2賦值表達式29
2.3.3逗號表達式30
2.3.4關係表示式31
2.3.5邏輯表達式32
2.3.6條件表達式33
2.3.7sizeof運算符34
2.3.8位運算34
2.3.9運算符的優先級和結合性36
2.4數據類型轉換37
2.4.1賦值時的類型轉換37
2.4.2表達式中隱含轉換39
2.4.3強制類型轉換39
2.5簡單的輸入與輸出控制40
2.5.1C++的輸入與輸出40
2.5.2使用I/O流控制符控制輸出格式41
2.6C++基礎知識綜合編程案例42
2.7小結與知識擴展44
2.7.1小結44
2.7.2C語言的printf()和scanf()函數44
2.7.3C語言的getchar()和putchar()函數46
2.7.4數據溢出47
習題48
第3章程序控制結構51
3.1順序控制結構51
3.2選擇控制結構52
3.2.1選擇控制語句if…else52
3.2.2條件運算符(?:)代替if…else語句53
3.2.3if…else語句的嵌套54
3.2.4多路選擇控制語句switch57
3.3循環控制結構58
3.3.1while語句58
3.3.2do…while語句60
3.3.3for語句61
3.3.4循環嵌套62
3.4程序控制進階63
3.4.1其他控制語句63
3.4.2輸入信息控制循環66
3.5程序控制綜合編程案例68
3.6小結與知識擴展75
3.6.1小結75
3.6.2字符函數庫76
習題77
第4章函數82
4.1函數的定義與調用82
4.1.1函數定義83
4.1.2函數調用85
4.2函數的參數傳遞87
4.2.1數值傳遞88
4.2.2引用傳遞89
4.2.3使用const說明參數90
4.2.4默認參數值的函數91
4.3遞歸函數92
4.4函數探幽95
4.4.1內聯函數95
4.4.2函數重載97
4.4.3函數模板99
4.5使用C++系統函數101
4.6函數綜合編程案例102
4.7小結與知識擴展106
4.7.1小結106
4.7.2main()函數106
習題108
第5章數組113
5.1數組的基本概念113
5.2一維數組114
5.2.1一維數組的聲明114
5.2.2一維數組的初始化114
5.2.3訪問一維數組的元素115
5.3多維數組118
5.3.1二維數組的聲明118
5.3.2二維數組的初始化119
5.3.3訪問二維數組的元素119
5.4數組作為函數參數122
5.4.1一維數組名作為參數122
5.4.2二維數組的行地址作為參數124
5.5數組與字符串126
5.5.1字符型數組的聲明及其初始化126
5.5.2字符串的基本操作127
5.6數組綜合編程案例130
5.6.1排序130
5.6.2查找132
5.6.3統計134
5.6.4字符處理136
5.6.5數列處理137
5.7小結與知識擴展139
5.7.1小結139
5.7.2數組越界139
5.7.3算法的時間複雜度及其表示140
習題141
第6章自定義數據類型145
6.1結構體145
6.1.1結構體的定義145
6.1.2結構體的使用147
6.1.3結構體數組149
6.2共用體151
6.3枚舉類型153
6.4類型自定義語句155
6.5類和對象156
6.6小結與知識擴展157
6.6.1小結157
6.6.2結構體的大小158
習題159
第7章指針160
7.1指針概述160
7.1.1指針的概念160
7.1.2指針變量的定義162
7.1.3指針的基本操作163
7.1.4指針的運算164
7.2指針與數組167
7.2.1指針與數組的關係167
7.2.2使用指針訪問一維數組元素167
7.2.3使用指針訪問二維數組元素169
7.2.4多級指針171
7.3指針與函數173
7.3.1指針作為函數參數173
7.3.2指向函數的指針175
7.3.3指針作為函數的返回類型178
7.4指針與字符串179
7.4.1字符型指針與字符串179
7.4.2使用字符型指針數組操作字符串181
7.4.3字符串標準庫函數182
7.5動態內存分配與new和delete運算符183
7.5.1動態內存分配183
7.5.2new運算符184
7.5.3delete運算符185
7.6指針綜合編程案例186
7.7小結與知識擴展193
7.7.1小結193
7.7.2malloc()和free()函數194
7.7.3常指針196
7.7.4鍊錶操作197
習題203
第8章數據的共享與保護205
8.1作用域與生存期205
8.1.1作用域205
8.1.2生存期208
8.1.3局部變量和全局變量209
8.2編譯預處理210
8.2.1文件包含210
8.2.2宏定義211
8.2.3條件編譯216
8.3多文件結構218
8.4命名空間219
8.5小結與知識擴展222
8.5.1小結222
8.5.2命令行參數222
8.5.3異常處理224
習題227
第9章輸入/輸出流與文件操作230
9.1輸入/輸出流概述230
9.1.1輸入/輸出流的概念230
9.1.2輸入/輸出標準流231
9.2控制輸出格式232
9.2.1使用流控制符232
9.2.2使用流類成員函數233
9.3使用流類成員函數實現輸入/輸出235
9.3.1輸入函數235
9.3.2輸出函數237
9.4串流類238
9.5文件流類及文件操作239
9.5.1文件的概念239
9.5.2文件的讀寫操作240
9.6小結與知識擴展243
9.6.1小結243
9.6.2C語言的文件操作函數244
習題249
第10章面向對象程序設計252
10.1面向對象程序設計思想252
10.1.1結構化程序設計的不足252
10.1.2從結構化程序設計到面向對象程序設計253
10.1.3面向對象的概念和方法254
10.1.4面向對象程序設計的特點255
10.2類和對象257
10.2.1類的定義257
10.2.2對象的定義及其使用258
10.2.3面向對象的標記259
10.3類的構造函數和析構函數261
10.4類的組合264
10.5類中數據和函數的共享與保護266
10.5.1靜態成員266
10.5.2友元268
10.6小結與知識擴展271
10.6.1小結271
10.6.2常類型272
習題275
第11章繼承性280
11.1繼承與派生280
11.1.1派生類的定義280
11.1.2派生類生成過程281
11.1.3多層次派生282
11.2類的繼承方式283
11.2.1公有繼承284
11.2.2保護繼承285
11.2.3私有繼承286
11.3派生類的構造函數和析構函數287
11.4派生中成員的標識與訪問289
11.4.1作用域分辨符290
11.4.2多繼承中作用域的分辨290
11.5對象指針292
11.6小結與知識擴展294
11.6.1小結294
11.6.2虛基類解決“二義性”295
習題297
第12章多態性304
12.1多態概述304
12.1.1多態性的基本概念304
12.1.2聯編與多態的實現方式304
12.1.3多態的實現原理305
12.2運算符重載305
12.2.1運算符重載的規則和形式306
12.2.2運算符重載為成員函數307
12.2.3運算符重載為友元函數309
12.2.4運算符重載實例310
12.3虛函數314
12.3.1虛函數概述314
12.3.2虛函數的限制316
12.3.3虛析構函數316
12.3.4純虛函數和抽像類317
12.4小結與知識擴展319
12.4.1小結319
12.4.2重載new和delete運算符319
習題320
參考文獻322
作者介紹
揣錦華,女,1964年出生,河北人,教授,碩士生導師,加拿大維多利亞大學(University of Victoria)訪問學者,長安大學信息工程學院軟件工程專業責任教授。長安大學“C/C++程序設計”一流線上課程建設負責人及主講教師,為本科生和研究生主講“C/C++程序設計”,“數據分析與處理軟件開發綜合實驗”和 “大數據分析與處理”等課程。主編並出版《C++程序設計基礎》和《面向對象程序設計與VC++實踐》等6部教材。主持和參加“軟件工程專業綜合改革試點”、“軟件工程專業人才培養模式創新實驗區”、“面向應用的程序設計實踐教學體系研究”、“創新型程序設計課程教學方法研究”等教學改革項目十餘項。