圖書簡介:
C++是近年來國內外廣泛使用的現代計算機語言,它既支持基於過程的程式設計,也支持面向對象的程式設計。國內許多高校陸續開設了C++程式設計課程。但是,由於C++涉及概念很多,語法比較複雜,內容十分廣泛,使不少人感到學習難度較大,難以入門。
本書作者深入調查了大學的程式設計課程的現狀和發展趨勢,參閱了國內外數十種有關C++的教材,認真分析了讀者在學習中的困難和認識規律,設計了讀者易於學習的教材體系,於2004年出版了《C++程式設計》一書。該書降低入門起點,不需要C語言的基礎,從零起點介紹程式設計和C++。廣大師生用後反映非常好,認為該書定位準確,概念清晰,深入淺出,取捨合理,以通俗易懂的語言對C++的許多難懂的概念作了透徹而通俗的說明,大大降低了初學者學習的困難,是一本初學者學習C++的好教材。
根據教學實踐的需要,作者對該書進行了修訂,出版了《C++程式設計(第2版)》,與第1版相比,內容更加豐富,講解更加清晰,學習更加容易,依據ANSI C++標準進行介紹,引導讀者從一開始就按C++的要求編程,而不是過多地遷就C語言的習慣。全書分為4篇: 基本知識;基於過程的程式設計;基於對象的程式設計;面向對象的程式設計。
為了便於教學,本書有兩本配套教材: 《C++程式設計題解和上機指導(第2版)》, 《C++程式設計實踐指導》,幫助學生通過實踐掌握C++的編程方法。
本書內容全面,例題豐富,概念清晰,循序漸進,易於學習,即使沒有教師講授,讀者也能看懂本書的大部分內容。本書是學習C++的入門教材,可供各類專業學生使用,也可作為計算機培訓班的教材以及讀者自學參考。
目錄
第1篇 基 本 知 識
第1章C++的初步知識3
??1.1 從C到C++3
??1.2 最簡單的C++程式5
1.3 C++程式的構成和書寫形式12
1.4 C++程式的編寫和實現13
1.5 關於C++上機實踐15
習題15
第2章 數據類型和表達式18
2.1 C++的數據類型18
2.2 常量20
2.2.1 什麼是常量20
2.2.2 數值常量20
2.2.3 字元常量22
2.2.4 符號常量25
2.3 變數26
2.3.1 什麼是變數26
2.3.2 變數名規則26
2.3.3 定義變數27
2.3.4 對變數賦初值28
2.3.5 常變數29
2.4 C++的運算符30
2.5 算術運算符與算術表達式30
2.5.1 基本的算術運算符30
2.5.2 算術表達式和運算符的優先權與結合性31
2.5.3 表達式中各類數值型數據間的混合運算312.5.4 自增(++)和自減(--)運算符32
2.5.5 強制類型轉換運算符33
2.6 賦值運算符和賦值表達式35
2.6.1 賦值運算符35
2.6.2 賦值過程中的類型轉換35
2.6.3 複合賦值運算符36
2.6.4 賦值表達式37
2.7 逗號運算符和逗號表達式38
習題39
第2篇 基於過程的程式設計
第3章 程式設計初步45
3.1 基於過程的程式設計和算法45
3.1.1 算法的概念45
3.1.2 算法的表示46
3.2 C++的程式結構和C++語句47
3.3 賦值操作50
3.4 C++的輸入與輸出50
??3.4.1 輸入流與輸出流的基本操作51
??3.4.2 在標準輸入流與輸出流中使用控制符53
3.4.3 用getchar和putchar 函式進行字元的輸入和輸出56
3.4.4 用scanf和printf函式進行輸入和輸出57
3.5 編寫順序結構的程式58
3.6 關係運算和邏輯運算59
3.6.1 關係運算和關係表達式60
??3.6.2 邏輯常量和邏輯變數61
3.6.3 邏輯運算和邏輯表達式62
3.7 選擇結構和if語句64
3.7.1if語句的形式64
3.7.2if語句的嵌套67
3.7.3 條件運算符和條件表達式68
3.7.4 多分支選擇結構與switch 語句69
3.7.5 編寫選擇結構的程式71
3.8 循環結構和循環語句74
3.8.1 用while語句構成循環74
3.8.2 用do-while語句構成循環75
3.8.3 用for語句構成循環76
3.8.4 幾種循環的比較79
3.8.5 循環的嵌套79
3.8.6 提前結束循環(break語句和continue語句)80
3.8.7 編寫循環結構的程式81
習題85
第4章 利用函式實現指定的功能88
4.1 為什麼需要函式88
4.2 定義函式的一般形式90
4.2.1 定義無參函式的一般形式90
4.2.2 定義有參函式的一般形式91
4.3 函式參數和函式的值91
4.3.1 形式參數和實際參數91
4.3.2 函式的返回值93
4.4 函式的調用94
4.4.1 函式調用的一般形式94
4.4.2 函式調用的方式94
4.4.3 對被調用函式的聲明和函式原型94
4.5 函式的嵌套調用97
4.6 函式的遞歸調用99
??4.7 內置函式103
??4.8 函式的重載104
??4.9 函式模板107
??4.10 有默認參數的函式109
4.11 局部變數和全局變數111
4.11.1 局部變數111
4.11.2 全局變數112
4.12 變數的存儲類別113
4.12.1 動態存儲方式與靜態存儲方式113
4.12.2 自動變數114
4.12.3 用static聲明靜態局部變數115
4.12.4 用register聲明暫存器變數117
4.12.5 用extern聲明外部變數118
4.12.6 用static聲明靜態外部變數119
4.13 變數屬性小結120
4.14 關於變數的聲明和定義122
4.15 內部函式和外部函式123
4.15.1 內部函式123
4.15.2 外部函式123
4.16 頭檔案125
4.16.1 頭檔案的內容125
??4.16.2 關於C++標準庫和頭檔案的形式126
習題126
第5章 利用數組處理批量數據128
5.1 為什麼需要用數組128
5.2 定義和引用一維數組129
5.2.1 定義一維數組129
5.2.2 引用一維數組的元素129
5.2.3 一維數組的初始化130
5.2.4 一維數組程式舉例130
5.3 定義和引用二維數組132
5.3.1 定義二維數組133
5.3.2 引用二維數組的元素134
5.3.3 二維數組的初始化134
5.3.4 二維數組程式舉例136
5.4 用數組作函式參數137
5.5 字元數組141
5.5.1 定義和初始化字元數組141
5.5.2 字元數組的賦值與引用142
5.5.3 字元串和字元串結束標誌143
5.5.4 字元數組的輸入輸出144
5.5.5 使用字元串處理函式對字元串進行操作146
5.5.6 字元數組套用舉例148
??5.6 C++處理字元串的方法--字元串類與字元串變數149
5.6.1 字元串變數的定義和引用150
5.6.2 字元串變數的運算151
5.6.3 字元串數組151
5.6.4 字元串運算舉例152
習題155
第6章 善於使用指針與引用157
6.1 什麼是指針157
6.2 變數與指針159
6.2.1 定義指針變數159
6.2.2 引用指針變數161
6.2.3 用指針作函式參數163
6.3 數組與指針168
6.3.1 指向數組元素的指針168
6.3.2 用指針變數作函式形參接收數組地址170
6.4 字元串與指針173
6.5 函式與指針175
6.5.1 用函式指針調用函式175
6.5.2 用指向函式的指針作函式參數176
6.6 返回指針值的函式177
6.7 指針數組和指向指針的指針177
6.7.1 指針數組177
6.7.2 指向指針的指針179
??6.8 const指針181
6.9 void指針類型183
6.10 有關指針的數據類型和指針運算的小結184
6.10.1 有關指針的數據類型的小結184
6.10.2 指針運算小結185
??6.11 引用186
6.11.1 什麼是變數的引用186
6.11.2 引用的簡單使用188
6.11.3 引用作為函式參數188
習題192
第7章 用戶自定義數據類型194
7.1 結構體類型194
7.1.1 為什麼需要用結構體類型194
7.1.2 結構體類型變數的定義方法及其初始化195
7.1.3 引用結構體變數198
7.1.4 結構體數組200
7.1.5 指向結構體變數的指針204
7.1.6 結構體類型數據作為函式參數207
??7.1.7 用new和delete運算符進行動態分配和撤銷存儲空間210
7.2 共用體類型212
7.3 枚舉類型212
7.4 用typedef聲明新的類型名216
習題218
第3篇 基於對象的程式設計
第8章 類和對象的特性223
8.1 面向對象程式設計方法概述223
8.1.1 什麼是面向對象的程式設計223
8.1.2 面向對象程式設計的特點227
8.1.3 類和對象的作用228
8.1.4 面向對象的軟體開發229
8.2 類的聲明和對象的定義230
8.2.1 類和對象的關係230
8.2.2 聲明類類型230
8.2.3 定義對象的方法233
8.2.4 類和結構體類型的異同234
8.3 類的成員函式236
8.3.1 成員函式的性質236
8.3.2 在類外定義成員函式236
8.3.3 內置成員函式237
8.3.4 成員函式的存儲方式239
8.4 對象成員的引用241
8.4.1 通過對象名和成員運算符訪問對象中的成員241
8.4.2 通過指向對象的指針訪問對象中的成員241
8.4.3 通過對象的引用來訪問對象中的成員242
8.5 類的封裝性和信息隱蔽242
8.5.1 公用接口與私有實現的分離242
8.5.2 類聲明和成員函式定義的分離244
8.5.3 面向對象程式設計中的幾個名詞245
8.6 類和對象的簡單套用舉例245
習題252
第9章 怎樣使用類和對象255
9.1 利用構造函式對類對象進行初始化255
9.1.1 對象的初始化255
9.1.2 用構造函式實現數據成員的初始化256
9.1.3 帶參數的構造函式258
9.1.4 用參數初始化表對數據成員初始化260
9.1.5 構造函式的重載261
9.1.6 使用默認參數的構造函式263
9.2 析構函式265
9.3 調用構造函式和析構函式的順序267
9.4 對象數組269
9.5 對象指針271
9.5.1 指向對象的指針271
9.5.2 指向對象成員的指針272
9.5.3this指針275
9.6 共用數據的保護276
9.6.1 常對象277
9.6.2 常對象成員278
9.6.3 指向對象的常指針279
9.6.4 指向常對象的指針變數280
9.6.5 對象的常引用283
9.6.6const型數據的小結284
9.7 對象的動態建立和釋放284
9.8 對象的賦值和複製286
9.8.1 對象的賦值286
9.8.2 對象的複製287
9.9 靜態成員290
9.9.1 靜態數據成員290
9.9.2 靜態成員函式292
9.10 友元296
9.10.1 友元函式296
9.10.2 友元類300
9.11 類模板300
習題305
第10章 運算符重載308
10.1 什麼是運算符重載308
10.2 運算符重載的方法310
10.3 重載運算符的規則313
10.4 運算符重載函式作為類成員函式和友元函式314
10.5 重載雙目運算符318
10.6 重載單目運算符322
10.7 重載流插入運算符“<<”和流提取運算符“>>" 325
10.7.1 重載流插入運算符“<<" 325
10.7.2 重載流提取運算符“>>" 328
10.8 有關運算符重載的歸納329
10.9 不同類型數據間的轉換331
10.9.1 標準類型數據間的轉換331
10.9.2 用轉換構造函式進行不同類型數據的轉換331
10.9.3 類型轉換函式333
習題338
第4篇 面向對象的程式設計
第11章 繼承與派生343
11.1 繼承與派生的概念343
11.2 派生類的聲明方式346
11.3 派生類的構成346
11.4 派生類成員的訪問屬性348
11.4.1 公用繼承349
11.4.2 私有繼承351
11.4.3 保護成員和保護繼承354
11.4.4 多級派生時的訪問屬性358
11.5 派生類的構造函式和析構函式359
11.5.1 簡單的派生類的構造函式359
11.5.2 有子對象的派生類的構造函式363
11.5.3 多層派生時的構造函式366
11.5.4 派生類構造函式的特殊形式368
11.5.5 派生類的析構函式369
11.6 多重繼承369
11.6.1 聲明多重繼承的方法369
11.6.2 多重繼承派生類的構造函式370
11.6.3 多重繼承引起的二義性問題372
11.6.4 虛基類376
11.7 基類與派生類的轉換380
11.8 繼承與組合384
11.9 繼承在軟體開發中的重要意義385
習題387
第12章 多態性與虛函式392
12.1 多態性的概念392
12.2 一個典型的例子393
12.3 利用虛函式實現動態多態性398
12.3.1 虛函式的作用398
12.3.2 靜態關聯與動態關聯402
12.3.3 在什麼情況下應當聲明虛函式403
12.3.4 虛析構函式404
12.4 純虛函式與抽象類405
12.4.1 純虛函式405
12.4.2 抽象類406
12.4.3 套用實例407
習題413
第13章 輸入輸出流415
13.1 C++的輸入和輸出415
13.1.1 輸入輸出的含義415
13.1.2C++的I/O對C的發展--類型安全和可擴展性415
13.1.3C++的輸入輸出流416
13.2 標準輸出流421
13.2.1cout,cerr和clog流421
13.2.2 標準類型數據的格式輸出423
13.2.3 用流成員函式put輸出字元426
13.3 標準輸入流427
13.3.1cin流427
13.3.2 用於字元輸入的流成員函式428
13.3.3istream類的其他成員函式429
13.4 對數據檔案的操作與檔案流433
13.4.1 檔案的概念433
13.4.2 檔案流類與檔案流對象434
13.4.3 檔案的打開與關閉435
13.4.4 對ASCII檔案的操作437
13.4.5 對二進制檔案的操作442
13.5 字元串流447
習題452
第14章C++工具453
14.1 異常處理453
14.1.1 異常處理的任務453
14.1.2 異常處理的方法454
14.1.3 在函式聲明中進行異常情況指定461
14.1.4 在異常處理中處理析構函式461
14.2 命名空間464
14.2.1 為什麼需要命名空間464
14.2.2 什麼是命名空間467
14.2.3 使用命名空間解決名字衝突469
14.2.4 使用命名空間成員的方法471
14.2.5 無名的命名空間473
14.2.6 標準命名空間std473
14.3 使用早期的函式館474
習題475
參考文獻480