《C++語言程序設計》將C++語言(兼容C語言)作為大學生學習程序設計的入門語言。全書共11章,第1章、第3章和第5章講解程序的結構和組織,第2章、第4章和第6章討論數(shù)據(jù)類型和數(shù)據(jù)的組織,第7章~第11章講述面向對象的程序設計。
本書編寫的目的是為學生打好程序設計的基礎。每章內容分為三個難度等級:“基本知識”部分講述C/C++語言及其使用方法;“編程技能”部分討論各種程序設計和編程方法;“刨根問底”部分講解程序的運行機制及產(chǎn)生相關結果的原因。
本書內容全面,深入淺出,同時配有大量習題,適合作為高等院校各專業(yè)的程序設計課程分層次教學的入門教材,也可以作為程序設計培訓教材和自學參考書。
C++語言是一門優(yōu)秀的程序設計語言,它全面兼容C語言,不僅保留了C語言簡潔、靈活、高效的特點,并且增加了面向對象程序設計的支持,從誕生以來一直備受廣大編程人員的喜愛。
本書將C++語言作為大學生學習程序設計的入門語言,其中包含C語言的內容。每章內容由淺入深,循序漸進,分成三個難度等級:“基本知識”部分講述C/C++語言及其使用方法;“編程技能”部分討論各種程序設計和編程方法,把編程的思想融入實例中,力求使讀者在掌握C++語言的同時,能夠對現(xiàn)實世界中較簡單的問題及其解決方法用計算機語言進行描述;“刨根問底”部分講解程序的運行機制、程序運行時產(chǎn)生相關結果的原因,使讀者“知其所以然”。
本書主要有以下幾個方面的特點。
1.將C++語言作為學習程序設計的入門語言,不必有C語言的基礎,可以在最短的時間內掌握一門面向對象的程序設計語言,即零基礎學習C++。
2.學習語言的最終目的是要編程,而編程的精髓是要體會計算機運行順序的思想,所以書中的實例都以內存的變化為依據(jù),力求使讀者在掌握C++語言的同時,能夠掌握編程的思路,并且理解程序背后的運行機制,編寫“好”程序。
3.書中對程序運行時的內存使用情況建立邏輯模型,比如,用“棧區(qū)”工作過程來描述函數(shù)調用機制、參數(shù)傳遞機制,用“堆區(qū)”講解指針的使用機制,用“棧區(qū)”和“堆區(qū)”的配合講述復制構造函數(shù),等等,可以幫助初學者對這些較難的內容逐步地深入理解。即使有經(jīng)驗的編程人員,閱讀本書也會有很大收獲。
4.精心選擇內容,科學組織內容。附錄提供了C/C++常用的函數(shù)和類庫,內容全面且精煉,重點、難點突出。
本書的內容適合C/C++語言的分層次教學使用,請參考表一和表二選擇教學內容。
表一 C語言教學內容
基本知識 編程技能 刨根問底
第1章 C語言(2學分) C語言(1學分)
第2章
第3章
第4章
第5章
第6章
第7章
第8章
第9章
第10章
第11章
表二 C++語言教學內容
基本知識 編程技能 刨根問底
第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)境,適合作為課程設計的參考內容。本書有配套的電子資源和在線課程,可以從西安電子科技大學出版社網(wǎng)站獲得。
書中不足之處在所難免,歡迎廣大讀者批評指正。
第1章 C++語言概述 1
基本知識 1
1.1 程序設計語言 1
1.2 程序設計 3
編程技能 5
程序開發(fā)過程 5
簡單的C++程序 6
刨根問底 9
內存模型 9
本章小結 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
本章小結 48
習題和思考題 48
第3章 控制語句 52
基本知識 52
3.1 算法的基本控制結構 52
3.1.1 程序的3種控制結構 52
3.1.2 算法及其表示 53
3.2 選擇結構 54
3.2.1 if選擇語句 54
3.2.2 switch選擇語句 60
3.3 循環(huán)結構 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
結構嵌套 70
刨根問底 74
跟蹤程序的執(zhí)行 74
本章小結 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 結構類型 94
4.3.1 結構類型的定義和初始化 95
4.3.2 結構變量的定義和使用 95
4.4 聯(lián)合類型 98
編程技能 100
字符數(shù)組與字符串 100
多維數(shù)組 102
冒泡排序 105
結構數(shù)組 108
刨根問底 109
字符數(shù)組的輸入和輸出 109
多維數(shù)組在內存中的存放 111
枚舉類型的內存空間 112
結構類型的內存空間 112
本章小結 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ù)的調用 124
5.4 全局變量與局部變量 126
5.4.1 局部變量 126
5.4.2 全局變量 126
5.4.3 作用域 127
5.4.4 可見性 128
5.5 結構化程序設計 129
5.5.1 多文件結構 129
5.5.2 編譯預處理 132
編程技能 136
遞歸函數(shù) 136
內聯(lián)函數(shù) 138
重載函數(shù) 139
帶默認參數(shù)值的函數(shù) 141
刨根問底 142
變量的存儲類型和生存期 142
函數(shù)調用的執(zhí)行機制 145
參數(shù)的傳遞機制 147
本章小結 150
習題和思考題 150
第6章 指針和引用 153
基本知識 153
6.1 指針 153
6.1.1 地址和指針變量 153
6.1.2 指針的定義和初始化 153
6.1.3 指針的使用 155
6.2 動態(tài)內存 157
6.2.1 C語言的動態(tài)內存申請和釋放 157
6.2.2 C++的動態(tài)內存申請和釋放 157
6.3 引用 159
6.3.1 引用的聲明 159
6.3.2 引用的使用 160
編程技能 160
指針與函數(shù) 160
指針與字符串 166
指針與數(shù)組 169
指針與結構體 173
刨根問底 177
void類型的指針 177
內存泄漏和指針懸掛 178
本章小結 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 構造函數(shù) 190
7.3 析構函數(shù) 195
7.4 面向對象程序設計 197
7.4.1 類的封裝性 197
7.4.2 軟件工程 197
7.4.3 面向對象分析 198
7.4.4 面向對象設計 198
7.4.5 面向對象的意義 199
編程技能 200
對象數(shù)組 200
使用對象傳遞函數(shù)參數(shù) 205
對象指針和堆對象 208
刨根問底 209
this指針 209
復制構造函數(shù) 210
內部類和命名空間 212
本章小結 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 派生類的構造和析構 226
8.3.1 基類只有無參構造函數(shù) 226
8.3.2 派生類構造函數(shù) 227
8.3.3 派生類的析構函數(shù) 231
8.4 虛基類 232
8.4.1 多繼承與二義性 232
8.4.2 虛基類 235
編程技能 235
在主函數(shù)中增加調試信息 235
刨根問底 237
同名覆蓋與重載 237
轉換與繼承 238
本章小結 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
包含內嵌對象的派生類構造 262
包含內嵌對象的派生類析構 270
刨根問底 272
賦值運算符重載 272
本章小結 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 虛析構函數(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
本章小結 302
習題和思考題 303
第11章 異常處理 309
基本知識 309
11.1 異常和異常處理 309
11.2 C++異常處理機制 311
11.3 用類對象傳遞異常 314
編程技能 316
用戶自定義類的對象傳遞異常 316
自定義exception類的派生類對象
傳遞異常 318
刨根問底 320
異常處理中的退棧和對象析構 320
本章小結 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