圖書內容
本書可作為第二門程式設計課程的教材,最好應在學過C語言之後使用。本書內容包括過程化設計和面向對象兩部分構成,但對過程化設計只以很少篇幅做提要式介紹。
全書共分10章。第1章介紹C++語言的預備知識,並用簡單示例比較了過程化程式設計與面向對象程式設計在思考問題上的差異,介紹面向對象程式設計的主要特點,基本的面向對象問題分析和程式設計方法。第2章介紹C++語言的過程化語法,並對C++語言中的基本對象作了滲透。第3、4章介紹C++語言的封裝特性,第5、6章分別介紹繼承和多態性。第7、8章分別討論運算符重載和流技術。第9章簡要說明了建立在類模板基礎上的泛型編程技術。第10章介紹了C++的異常處理機制。本書的每章開始以精煉的語言扼要說明其主要內容,難點被適當地分解在各章里。
部分重點章節安排了若干有實際背景的設計案例。每章最後配備了若干思考題和相當數量的習題。思考題有助於理解語言的語法現象,值得認真對照教材去分析,或者構造適當的例子去實驗,而通過完成這些習題,有助於對知識點的透徹掌握。為了幫助學習者順利進行編程實踐,書後以附錄形式對C++Builder 6.0、DEV C++和
Visual C++ 6.0這幾種環境的編程甚至程式調試方法都給出了適度介紹。
目 錄
第1章 C++語言與面向對象程式設計概述 1
1.1 C++語言概述 1
1.1.1 標準C++語言的產生與發展 1
1.1.2 編寫簡單的C++語言程式 2
1.2 由過程化到面向對象程式設計 4
1.2.1 過程化程式設計 4
1.2.2 面向對象的程式設計 6
1.3 面向對象程式的主要特徵 7
1.3.1 抽象與封裝(encapsulation) 8
1.3.2 由繼承(inheritance)實現重用 9
1.3.3 由多態(polymorphism)反映
變革 10
1.4 面向對象的問題分析 11
1.4.1 確定類 11
1.4.2 確定類的屬性 11
1.4.3 確定類的方法 12
1.4.4 確定對象模式 12
思考與練習1 13
實驗1 13
第2章 C++語言基礎 14
2.1 標識符與關鍵字 14
2.1.1 標識符 14
2.1.2 關鍵字 14
2.2 數據與數據類型 15
2.2.1 基本數據類型 15
2.2.3 字面值 15
2.2.4 符號常量 16
2.2.5 變數 18
2.3 基本運算 18
2.3.1 運算符和表達式 18
2.3.2 數據類型轉換與造型 20
2.4 語句與流程控制 21
2.4.1 簡單語句與複合語句 21
2.4.2 分支語句 22
2.4.3 循環語句 23
2.4.4 流程轉向語句 24
2.4.5 數據輸入與輸出 25
2.5 指針、數組與引用 26
2.5.1 指針 26
2.5.2 數組 28
2.5.3 引用 30
2.6 函式 31
2.6.1 函式的定義與聲明 31
2.6.2 函式調用與參數匹配 32
2.6.3 函式返回值與函式調用表達式 35
2.6.4 形式參數的默認值 37
2.6.5 內聯函式 37
2.6.6 函式重載 38
2.6.7 函式模板 39
2.7 new、delete與動態對象 42
2.7.1 動態生成和銷毀一個對象 42
2.7.2 動態生成和銷毀對象數組 43
2.8 名字空間 43
2.8.1 名字衝突及對策 43
2.8.2 定義和使用名字空間 44
2.9 預處理指令 45
2.9.1 宏定義 45
2.9.2 條件編譯 46
2.9.3 檔案包含 46
思考與練習2 47
實驗2 50
第3章 類、對象與封裝 51
3.1 類 51
3.1.1 類的含義與表述 51
3.1.2 類定義的語法規則 52
3.2 對象 55
3.2.1 對象定義 55
3.2.2 成員訪問 56
3.2.3 對象存儲 58
3.3 類的方法 59
3.3.1 為類提供必要的方法 59
3.3.2 inline方法 61
3.3.3 const方法 61
3.3.4 隱含的this指針 62
3.3.5 方法重載與預設參數 63
3.3.6 類的模板函式方法 64
3.4 構造與析構 64
3.4.1 初始化的難題 64
3.4.2 構造函式與對象初始化 65
3.4.3 無名對象 67
3.4.4 對象數組與動態對象 68
3.4.5 初始化列表與特殊成員的
初始化 69
3.4.6 共用體類與位域類 71
3.4.7 析構函式與對象拆除 72
3.5 拷貝構造與對象拆除 73
3.5.1 拷貝構建新對象 73
3.5.2 改變預設的拷貝行為 74
3.5.3 拷貝構造器的實現 75
3.5.4 用自己定義的析構器拆除對象 76
3.6 字元串類string 76
3.6.1 string類的屬性與對象構造 76
3.6.2 string類支持的主要運算 76
3.6.3 string類的主要方法 77
3.7 案例一:設計一個棧類 78
3.8 案例二:公司員工類的設計(一) 80
思考與練習3 83
實驗3 85
第4章 類的靜態成員、友元與指針訪問 87
4.1 靜態成員 87
4.1.1 靜態屬性 87
4.1.2 靜態方法 90
4.2 友元 91
4.2.1 友元函式 91
4.2.2 類方法作為友元 92
4.2.3 友元類 93
4.3 指向類成員的指針 94
4.3.1 利用普通指針訪問屬性 94
4.3.2 指向非靜態方法的指針 95
4.4 案例三:賬戶類的設計 96
思考與練習4 98
實驗4 100
第5章 繼承與重用 101
5.1 繼承的概念與表示 101
5.1.1 繼承與派生 101
5.1.2 繼承關係的描述 102
5.2 繼承的實現 103
5.2.1 繼承的語法形式 103
5.2.2 訪問父類的成員 104
5.3 類之間的關係與類的構造 107
5.3.1 繼承與聚集 108
5.3.2 子類的構造 109
5.3.3 派生類的析構 110
5.4 複雜對象的構造與析構 111
5.4.1 責任重大的構造器 111
5.4.2 類成員的構造與析構次序 112
5.5 繼承的工作方式 113
5.5.1 派生類是一種(個)基類 113
5.5.2 利用指針和引用的訪問 114
5.5.3 非public方式派生 114
5.6 案例四:公司員工類的設計(二) 115
5.6.1 雇員類的定義 115
5.6.2 工人類的定義 116
5.6.3 經理類的定義 117
思考與練習5 118
實驗5 121
第6章 虛函式與多態性 122
6.1 多態性及其語法規則 122
6.1.1 多態性與聯編方式 122
6.1.2 用虛函式實現動態綁定 123
6.2 共同基類下的對象訪問 124
6.2.1 概念中的共性 124
6.2.2 公共基類 125
6.2.3 利用虛函式支持動態訪問 126
6.3 對虛函式的進一步討論 127
6.3.1 如何構成虛函式關係 127
6.3.2 類的構造、析構與虛函式 129
6.3.3 虛函式的內部實現機制 130
6.3.4 重載、覆蓋和隱藏 132
6.3.5 動態造型(dynamic_cast) 134
6.4 純虛函式與抽象類 135
6.4.1 純虛函式 135
6.4.2 抽象類 136
6.5 多重繼承 138
6.5.1 多重繼承的語法規則 138
6.5.2 多重繼承中的二義性 140
6.5.3 虛繼承 141
6.6 案例五:公司員工類的設計(三) 144
6.6.1 雇員類的定義 145
6.6.2 其他類的定義 145
思考與練習6 146
實驗6 149
第7章 運算符重載 150
7.1 重載運算符的概念與一般方法 150
7.1.1 運算符重載是函式重載 150
7.1.2 重載運算符的兩種方法 151
7.1.3 重載運算符的限制 153
7.2 重載運算符的設計 154
7.2.1 運算符函式的參數 154
7.2.2 運算符函式的返回值 154
7.3 常見運算符的重載 155
7.3.1 重載增量運算符++ 155
7.3.2 重載賦值運算符= 157
7.3.3 重載==運算符和!=運算符 160
7.3.4 重載下標運算符[] 160
7.3.5 重載類型轉換運算符() 161
7.3.6 重載函式調用運算符與函式
對象 162
7.4 案例六:一個向量類的運算符
重載 164
7.4.1 向量類定義 164
7.4.2 為向量添加運算 166
思考與練習7 168
實驗7 168
第8章 流與檔案操作 169
8.1 理解流機制 169
8.1.1 流與檔案 169
8.1.2 從函式到對象 169
8.1.3 源、匯和iostream流控制類 170
8.2 構造可流的類 172
8.2.1 再談cout和cin對象 172
8.2.2 重載輸出運算符<< 172
8.2.3 重載輸入運算符>> 173
8.3 格式控制 174
8.3.1 使用流的方法 175
8.3.2 使用操控符(Manipulators) 179
8.3.3 記憶體格式化(字元串流) 182
8.4 檔案流 183
8.4.1 檔案流的打開與關閉 183
8.4.2 檔案的讀寫操作 185
8.4.3 二進制檔案 186
8.4.4 檔案的隨機訪問 187
8.5 案例七:一個圖書管理系統的
設計 188
8.5.1 對象的輸入/輸出 189
8.5.2 管理程式 189
思考與練習8 191
實驗8 191
第9章 類模板、容器與泛型算法 192
9.1 類模板 192
9.1.1 類模板的定義 192
9.1.2 使用類模板 193
9.1.3 類模板的方法實現 194
9.1.4 類模板與普通類之間的相互
繼承 195
9.1.5 一個模板類實例complex 196
9.1.6 設計一個佇列模板Queue 197
9.2 容器與泛型 199
9.2.1 抽象容器類模板 199
9.2.2 泛型編程 199
9.3 疊代器 202
9.3.1 輸入疊代器(InputIterator) 203
9.3.2 輸出疊代器(OutputIterator) 204
9.3.3 前向疊代器(ForwardIterator) 204
9.3.4 雙向疊代器(BidirectionalIterator)
和隨機訪問疊代器(Random-
AccessIterator) 204
9.3.5 容器提供的疊代器 205
9.3.6 插入疊代器(適配器) 205
9.3.7 反向疊代器(reverse_iterator) 206
9.4 幾種主要容器類與類的方法 207
9.4.1 容器類的主要方法 207
9.4.2 向量(vector)容器 208
9.4.3 列表(list)容器 209
9.4.4 雙端佇列(deque)、棧(stack)
和佇列(queue)容器 210
9.4.5 映射(map)容器 210
9.5 常用的通用算法 212
9.5.1 唯讀算法 212
9.5.2 改寫元素算法 213
9.5.3 元素排序算法 213
思考與練習9 214
實驗9 215
第10章 異常處理 216
10.1 異常及常規處理方法 216
10.1.1 常見的異常 216
10.1.2 常規處理方法 216
10.2 用try-catch結構處理異常 218
10.2.1 try-catch異常處理機制 218
10.2.2 異常 219
10.2.3 拋出異常 219
10.2.4 用try結構監視異常 220
10.2.5 用catch結構處理異常 220
10.3 合理地處理異常 222
10.3.1 異常類設計 222
10.3.2 多catch結構組成的異常
捕捉網 224
10.3.3 捕捉自己應該處理的異常 225
10.3.4 申明異常 227
思考與練習10 228
實驗10 228
附錄A C++Builder集成化環境的使用 229
附錄B DEV-C++與Visual C++ 6編程
環境 238
附錄C 運算符的優先權與結合性 244
參考文獻 245