《C++語言程序設計》將C++語言(兼容C語言)作為大學生學習程序設計的入門語言。全書共11章,第1章、第3章和第5章講解程序的結(jié)構(gòu)和組織,第2章、第4章和第6章討論數(shù)據(jù)類型和數(shù)據(jù)的組織,第7章~第11章講述面向?qū)ο蟮某绦蛟O計。
本書編寫的目的是為學生打好程序設計的基礎。每章內(nèi)容分為三個難度等級:“基本知識”部分講述C/C++語言及其使用方法;“編程技能”部分討論各種程序設計和編程方法;“刨根問底”部分講解程序的運行機制及產(chǎn)生相關結(jié)果的原因。
本書內(nèi)容全面,深入淺出,同時配有大量習題,適合作為高等院校各專業(yè)的程序設計課程分層次教學的入門教材,也可以作為程序設計培訓教材和自學參考書。
C++語言是一門優(yōu)秀的程序設計語言,它全面兼容C語言,不僅保留了C語言簡潔、靈活、高效的特點,并且增加了面向?qū)ο蟪绦蛟O計的支持,從誕生以來一直備受廣大編程人員的喜愛。
本書將C++語言作為大學生學習程序設計的入門語言,其中包含C語言的內(nèi)容。每章內(nèi)容由淺入深,循序漸進,分成三個難度等級:“基本知識”部分講述C/C++語言及其使用方法;“編程技能”部分討論各種程序設計和編程方法,把編程的思想融入實例中,力求使讀者在掌握C++語言的同時,能夠?qū)ΜF(xiàn)實世界中較簡單的問題及其解決方法用計算機語言進行描述;“刨根問底”部分講解程序的運行機制、程序運行時產(chǎn)生相關結(jié)果的原因,使讀者“知其所以然”。
本書主要有以下幾個方面的特點。
1.將C++語言作為學習程序設計的入門語言,不必有C語言的基礎,可以在最短的時間內(nèi)掌握一門面向?qū)ο蟮某绦蛟O計語言,即零基礎學習C++。
2.學習語言的最終目的是要編程,而編程的精髓是要體會計算機運行順序的思想,所以書中的實例都以內(nèi)存的變化為依據(jù),力求使讀者在掌握C++語言的同時,能夠掌握編程的思路,并且理解程序背后的運行機制,編寫“好”程序。
3.書中對程序運行時的內(nèi)存使用情況建立邏輯模型,比如,用“棧區(qū)”工作過程來描述函數(shù)調(diào)用機制、參數(shù)傳遞機制,用“堆區(qū)”講解指針的使用機制,用“棧區(qū)”和“堆區(qū)”的配合講述復制構(gòu)造函數(shù),等等,可以幫助初學者對這些較難的內(nèi)容逐步地深入理解。即使有經(jīng)驗的編程人員,閱讀本書也會有很大收獲。
4.精心選擇內(nèi)容,科學組織內(nèi)容。附錄提供了C/C++常用的函數(shù)和類庫,內(nèi)容全面且精煉,重點、難點突出。
本書的內(nèi)容適合C/C++語言的分層次教學使用,請參考表一和表二選擇教學內(nèi)容。
表一 C語言教學內(nèi)容
基本知識 編程技能 刨根問底
第1章 C語言(2學分) C語言(1學分)
第2章
第3章
第4章
第5章
第6章
第7章
第8章
第9章
第10章
第11章
表二 C++語言教學內(nèi)容
基本知識 編程技能 刨根問底
第1章 C++語言(3學分)
第2章
第3章
第4章 C++語言(1學分)
第5章
第6章
第7章
第8章
第9章
第10章
第11章
本書有配套的輔導書《C++語言程序設計案例及實踐輔導》,其中第1章~第11章對應本書的相關章節(jié),除了各章習題解答,每章還提供了豐富的程序案例,第12章講述窗口程序設計,第13章介紹郵件發(fā)送程序設計,采用的是Visual Studio 2015集成開發(fā)環(huán)境,第14章由淺入深地講解文本分析程序設計,采用的是QT5集成開發(fā)環(huán)境,適合作為課程設計的參考內(nèi)容。本書有配套的電子資源和在線課程,可以從西安電子科技大學出版社網(wǎng)站獲得。
書中不足之處在所難免,歡迎廣大讀者批評指正。
第1章 C++語言概述 1
基本知識 1
1.1 程序設計語言 1
1.2 程序設計 3
編程技能 5
程序開發(fā)過程 5
簡單的C++程序 6
刨根問底 9
內(nèi)存模型 9
本章小結(jié) 11
習題和思考題 11
第2章 基本數(shù)據(jù)類型與表達式 13
基本知識 13
2.1 C++的詞法記號和標識符 13
2.1.1 字符集 13
2.1.2 關鍵字 13
2.1.3 標識符 14
2.1.4 分隔符 14
2.1.5 空白 14
2.2 基本數(shù)據(jù)類型 14
2.3 變量和常量 16
2.3.1 變量 16
2.3.2 常量 19
2.4 運算符和表達式 22
2.4.1 表達式 22
2.4.2 語句和塊 23
2.4.3 運算符 23
2.5 C語言的輸入/輸出 31
2.5.1 基本輸出 32
2.5.2 基本輸入 33
2.6 C++的輸入/輸出 34
2.6.1 標準輸入流 35
2.6.2 標準輸出流 35
編程技能 36
等于號和雙等于號 36
sizeof運算符 37
輸出格式控制 37
使用string類型處理字符串 42
刨根問底 45
磁盤文件是什么 45
本章小結(jié) 48
習題和思考題 48
第3章 控制語句 52
基本知識 52
3.1 算法的基本控制結(jié)構(gòu) 52
3.1.1 程序的3種控制結(jié)構(gòu) 52
3.1.2 算法及其表示 53
3.2 選擇結(jié)構(gòu) 54
3.2.1 if選擇語句 54
3.2.2 switch選擇語句 60
3.3 循環(huán)結(jié)構(gòu) 62
3.3.1 while循環(huán)語句 62
3.3.2 do-while循環(huán)語句 64
3.3.3 for循環(huán)語句 65
3.4 break語句和continue語句 67
編程技能 69
隨機數(shù) 69
結(jié)構(gòu)嵌套 70
刨根問底 74
跟蹤程序的執(zhí)行 74
本章小結(jié) 80
習題和思考題 81
第4章 數(shù)組及自定義數(shù)據(jù)類型 85
基本知識 85
4.1 數(shù)組 85
4.1.1 數(shù)組定義及初始化 85
4.1.2 訪問數(shù)組元素 87
4.1.3 字符數(shù)組 88
4.1.4 多維數(shù)組 89
4.2 枚舉類型 92
4.2.1 枚舉類型定義 92
4.2.2 枚舉變量定義及使用 93
4.3 結(jié)構(gòu)類型 94
4.3.1 結(jié)構(gòu)類型的定義和初始化 95
4.3.2 結(jié)構(gòu)變量的定義和使用 95
4.4 聯(lián)合類型 98
編程技能 100
字符數(shù)組與字符串 100
多維數(shù)組 102
冒泡排序 105
結(jié)構(gòu)數(shù)組 108
刨根問底 109
字符數(shù)組的輸入和輸出 109
多維數(shù)組在內(nèi)存中的存放 111
枚舉類型的內(nèi)存空間 112
結(jié)構(gòu)類型的內(nèi)存空間 112
本章小結(jié) 113
習題和思考題 113
第5章 函數(shù) 116
基本知識 116
5.1 函數(shù)概述 116
5.1.1 自定義函數(shù)概述 116
5.1.2 庫函數(shù)概述 117
5.2 函數(shù)的定義 118
5.2.1 定義函數(shù) 118
5.2.2 函數(shù)原型 120
5.2.3 return語句 122
5.3 函數(shù)的調(diào)用 124
5.4 全局變量與局部變量 126
5.4.1 局部變量 126
5.4.2 全局變量 126
5.4.3 作用域 127
5.4.4 可見性 128
5.5 結(jié)構(gòu)化程序設計 129
5.5.1 多文件結(jié)構(gòu) 129
5.5.2 編譯預處理 132
編程技能 136
遞歸函數(shù) 136
內(nèi)聯(lián)函數(shù) 138
重載函數(shù) 139
帶默認參數(shù)值的函數(shù) 141
刨根問底 142
變量的存儲類型和生存期 142
函數(shù)調(diào)用的執(zhí)行機制 145
參數(shù)的傳遞機制 147
本章小結(jié) 150
習題和思考題 150
第6章 指針和引用 153
基本知識 153
6.1 指針 153
6.1.1 地址和指針變量 153
6.1.2 指針的定義和初始化 153
6.1.3 指針的使用 155
6.2 動態(tài)內(nèi)存 157
6.2.1 C語言的動態(tài)內(nèi)存申請和釋放 157
6.2.2 C++的動態(tài)內(nèi)存申請和釋放 157
6.3 引用 159
6.3.1 引用的聲明 159
6.3.2 引用的使用 160
編程技能 160
指針與函數(shù) 160
指針與字符串 166
指針與數(shù)組 169
指針與結(jié)構(gòu)體 173
刨根問底 177
void類型的指針 177
內(nèi)存泄漏和指針懸掛 178
本章小結(jié) 179
習題和思考題 179
第7章 類與對象 183
基本知識 183
7.1 類和對象的定義 183
7.1.1 基本概念 183
7.1.2 類的聲明 184
7.1.3 類的實現(xiàn) 186
7.1.4 對象的定義和使用 188
7.1.5 類的作用域與可見性 189
7.2 構(gòu)造函數(shù) 190
7.3 析構(gòu)函數(shù) 195
7.4 面向?qū)ο蟪绦蛟O計 197
7.4.1 類的封裝性 197
7.4.2 軟件工程 197
7.4.3 面向?qū)ο蠓治?198
7.4.4 面向?qū)ο笤O計 198
7.4.5 面向?qū)ο蟮囊饬x 199
編程技能 200
對象數(shù)組 200
使用對象傳遞函數(shù)參數(shù) 205
對象指針和堆對象 208
刨根問底 209
this指針 209
復制構(gòu)造函數(shù) 210
內(nèi)部類和命名空間 212
本章小結(jié) 214
習題和思考題 214
第8章 繼承 220
基本知識 220
8.1 繼承的概念 220
8.2 基類和派生類 221
8.2.1 簡單的繼承和派生 221
8.2.2 定義派生類 223
8.2.3 繼承方式和訪問控制 224
8.2.4 同名覆蓋 226
8.3 派生類的構(gòu)造和析構(gòu) 226
8.3.1 基類只有無參構(gòu)造函數(shù) 226
8.3.2 派生類構(gòu)造函數(shù) 227
8.3.3 派生類的析構(gòu)函數(shù) 231
8.4 虛基類 232
8.4.1 多繼承與二義性 232
8.4.2 虛基類 235
編程技能 235
在主函數(shù)中增加調(diào)試信息 235
刨根問底 237
同名覆蓋與重載 237
轉(zhuǎn)換與繼承 238
本章小結(jié) 241
習題和思考題 241
第9章 類的特殊成員 246
基本知識 246
9.1 類的靜態(tài)成員 246
9.1.1 靜態(tài)數(shù)據(jù)成員 246
9.1.2 靜態(tài)成員函數(shù) 248
9.2 常對象和常成員 249
9.2.1 常對象 249
9.2.2 常成員 249
9.3 類的組合 252
9.4 友元 254
9.5 運算符重載 258
9.5.1 運算符重載的使用及其限制 258
9.5.2 運算符重載的定義 259
編程技能 262
包含內(nèi)嵌對象的派生類構(gòu)造 262
包含內(nèi)嵌對象的派生類析構(gòu) 270
刨根問底 272
賦值運算符重載 272
本章小結(jié) 274
習題和思考題 275
第10章 多態(tài) 277
基本知識 277
10.1 多態(tài)的概念 277
10.2 運行時多態(tài) 278
10.2.1 虛函數(shù) 279
10.2.2 虛析構(gòu)函數(shù) 281
10.2.3 純虛函數(shù)與抽象類 281
10.3 模板多態(tài) 282
10.3.1 函數(shù)模板 282
10.3.2 類模板 286
編程技能 290
函數(shù)模板 290
運行時多態(tài) 293
刨根問底 300
重載與靜態(tài)聯(lián)編 300
覆蓋與靜態(tài)聯(lián)編 300
虛函數(shù)與動態(tài)聯(lián)編 301
本章小結(jié) 302
習題和思考題 303
第11章 異常處理 309
基本知識 309
11.1 異常和異常處理 309
11.2 C++異常處理機制 311
11.3 用類對象傳遞異常 314
編程技能 316
用戶自定義類的對象傳遞異常 316
自定義exception類的派生類對象
傳遞異常 318
刨根問底 320
異常處理中的退棧和對象析構(gòu) 320
本章小結(jié) 323
習題和思考題 324
附錄 常用C/C++庫 327
附錄1 C語言文件的輸入/輸出 327
一、打開和關閉文件 327
二、寫文件 328
三、讀文件 328
四、文件的隨機訪問 329
附錄2 I/O流類 329
一、標準輸出流對象 330
二、標準輸入流對象 331
三、文件輸出流 332
四、文件輸入流 333
附錄3 string類 333
一、string對象的初始化 334
二、string對象的基本操作 334
附錄4 vector類 335
參考文獻 338