本書較為全面地介紹了程序設計語言C++的基本概念、基本語法和基本程序思想。全書共分為12章和兩個附錄,內容包括計算機基礎知識、C++基本概念、流程控制語句、函數(shù)和編譯預處理、構造數(shù)據(jù)類型、指針、類和對象、繼承與派生、多態(tài)、輸入輸出流類庫、模板。
本書的寫法遵循了計算機中“自頂向下”的思維方式,在整體上自上而下,由點到面,由一般到具體,由簡單到復雜地展開。本書有大量精選的例題以及對例題的解析,還有大量反映C++概念和語法的習題。
本書可以作為大專院校理工科學生學習C++語言的教材,也可以作為計算機二級考試的參考書。
計算機語言是現(xiàn)代大學生的必修課。各高校都開設了計算機語言課,從Basic、Fortran、Pascal,到C,再到現(xiàn)在的C++. C++是一種重要的計算機語言,它特別適合開發(fā)大型系統(tǒng)程序,它的機制獨特,功能強大,高效而實用,C++引導著程序設計的潮流。在計算機基礎教學領域中,C++教學蓬勃發(fā)展,洶涌的勢頭大有迅速取代C語言的勢頭。
在大學中,初學C++的人說C++難學,初教C++的人說C++難教。C++的確難學難教,難點之一是計算機語言的思維模式。它是強邏輯化的,但又不同于數(shù)學的邏輯,它的邏輯是建立在馮·諾依曼原理之上的,也建立在離散演繹的特色之上。它以一組語法為基礎,以邏輯為手段。難點之二是計算機語言也是語言,學習語言需要大量記憶,也需要靈感,這讓學習理工科的學生不易適應。難點之三是C++的個性。C++確實有很強的個性,數(shù)據(jù)類型豐富、語法現(xiàn)象繁多、嚴謹而又靈活。學習C++需要大量的時間和精力。難點之四是學習C++大多是剛入大學校門的一年級學生,缺乏學習經(jīng)驗,對于這門全新、枯燥、龐大的課程,心有余而力不足。
本書作者都是從事高校計算機語言教學的專家,有著大型軟件設計經(jīng)驗。對高等教育熟悉,對C++理解深刻,對大學生心理、思維習慣、學習的困惑有所了解,是編寫這本書的基礎。本書的讀者群是初次學習計算機語言的大學生,本書也可作為自學C++的參考書。
本書在結構上和現(xiàn)有C++教科書都不相同,詳盡而不唆,專業(yè)而不枯燥,仔細閱讀頗有味道。第1章簡單介紹了計算機基礎知識,為學習C++打下基礎。其內容包含計算機系統(tǒng)結構及工作原理、計算機中的數(shù)據(jù)表示和存儲、計算機語言及其發(fā)展、Windows操作系統(tǒng)、算法和數(shù)據(jù)結構基礎。第2章~第7章介紹了C++面向過程程序設計,其中在第6章中初步介紹了類。第8章~第12章介紹了C++面向對象程序設計。本書不是用來介紹Visual C++ 6.0的,但書中C++部分所有例題均在Visual C++6.0下調試通過,其例題在BC下也能正確編譯運行。關于Visual C++中的MFC等有關知識,將在配套出版的《C++課程設計》一書中介紹。 本書的寫法遵循了計算機中“自頂向下”的思維方式,在整體上自上而下,由點到面,由一般到具體,由簡單到復雜地展開。每章的第1節(jié)都是導讀,導讀部分簡明介紹了本章的內容以及與前面知識的聯(lián)系,從而幫助讀者從整體上俯視該章的知識。在細節(jié)知識的介紹上則由具體到一般,引導讀者從具體的案例中提煉出一般性,做到舉一反三。
本書的例題都是經(jīng)過精選的C++經(jīng)典題目,每個題目都能說明一個問題,介紹一個知識點或一種算法,程序中有大量的注釋,有助于讀者思考和分析問題。其中許多題目頗具趣味,可以提高讀者學習C++的興趣。
本書的習題部分也是本書的一大特色,在題型上與現(xiàn)在流行的考試題型(包括等級考試題型)保持一致,有選擇、填空、閱讀程序、完善程序和編寫程序等多個方面;在內容上,包括C++的概念、語法、算法、技巧等所有C++語言要素,且題量豐富。
本書共有12章,第1章由徐冬梅老師編寫,第2章~第4章和附錄由何鐵軍老師編寫,第5章~第7章由朱金付老師編寫,第8章、第9章由柏毅老師編寫,第10章~第12章由鄭雪清老師編寫。最后由朱金付老師統(tǒng)稿。朱敏教授審閱了全書并做了大量的指導工作。
本書和同期出版的《C++程序設計實驗指導書》、已經(jīng)出版的《C++程序設計解析》(清華大學出版社,ISBN: 978-7-302-16188-2)以及即將出版的《C++課程設計》構成一個基本的C++學習教材集合。學生通過這些書的綜合學習,可以在相當程度上掌握C++的基本概念、體系結構和程序設計基本方法,為將來進一步學習計算機語言奠定深厚的基礎。
在日常的教學活動中,學生提出的很多疑難問題,在作業(yè)和考試中暴露出的問題,都給了作者許多有益的啟發(fā),也是作者編寫本書的動力。但是本書作者所接觸的學生群有限,對C++的教學理解尚有局限性,加上本書成書倉促,書中難免有許多不足甚至是錯誤之處,懇請廣大讀者不吝指正,以利于在再版時參考。
朱金付2009年1月
第1章 計算機基礎知識1
1.1 本章導讀1
1.2 計算機系統(tǒng)結構及工作原理1
1.2.1 計算機的體系結構--馮·諾依曼結構2
1.2.2 計算機中的數(shù)據(jù)存儲體系5
1.2.3 計算機的工作原理8
1.3 數(shù)制轉換、字符編碼10
1.3.1 進位計數(shù)制10
1.3.2 不同數(shù)制之間的轉換11
1.3.3 計算機中的數(shù)據(jù)表示和存儲15
1.3.4 非數(shù)值數(shù)據(jù)的編碼19
1.4 程序設計語言23
1.5 操作系統(tǒng)25
1.5.1 操作系統(tǒng)的組成和功能26
1.5.2 人與計算機的交互28
1.5.3 Windows的文件系統(tǒng)30
1.6 算法與算法設計基礎34
1.6.1 算法34
1.6.2 算法的表示37
1.6.3 算法設計基本方法38
1.7 數(shù)據(jù)結構基礎41
1.7.1 數(shù)據(jù)結構的基本概念41
1.7.2 數(shù)據(jù)結構的表示43
1.7.3 抽象數(shù)據(jù)類型46
1.7.4 棧和隊列47
1.7.5 幾個典型的基本算法48
習題49
C++程序設計目錄 第2章 C++基本概念53
2.1 本章導讀53
2.2 C語言與C++語言簡介54
2.2.1 C語言與C++的起源54
2.2.2 第一個C++源程序55
2.2.3 編譯、調試、運行程序56
2.2.4 Visual C++集成開發(fā)環(huán)境57
2.3 基本詞法單位58
2.3.1 關鍵字58
2.3.2 標識符58
2.3.3 標點符號59
2.3.4 分隔符59
2.4 數(shù)據(jù)類型59
2.5 變量61
2.5.1 變量的定義和初始值61
2.5.2 變量與引用61
2.6 常量62
2.6.1 整型常量63
2.6.2 實型常量63
2.6.3 字符常量63
2.6.4 轉義字符64
2.6.5 字符串常量65
2.6.6 const常變量65
2.6.7 宏定義常量65
2.7 運算符和表達式66
2.7.1 運算符和運算符優(yōu)先級66
2.7.2 算術運算符與算術表達式67
2.7.3 賦值運算符和賦值表達式71
2.7.4 關系運算符和關系表達式72
2.7.5 邏輯運算符和邏輯表達式73
2.7.6 字位運算符74
2.7.7 其他常用運算符75
2.7.8 類型轉換76
2.8 C++語句78
2.9 簡單輸入、輸出78
2.9.1 cin78
2.9.2 cout81
習題83
第3章 流程控制語句87
3.1 本章導讀87
3.2 選擇結構語句88
3.2.1 if語句88
3.2.2 switch語句95
3.2.3 if與switch之間的轉換98
3.3 循環(huán)結構99
3.3.1 while循環(huán)100
3.3.2 do-while循環(huán)101
3.3.3 for循環(huán)102
3.3.4 三種循環(huán)的等價性和區(qū)別104
3.3.5 循環(huán)的嵌套104
3.4 控制執(zhí)行順序的語句107
3.4.1 break語句107
3.4.2 continue語句109
3.5 算法與算法設計方法109
3.5.1 枚舉法(窮舉法)110
3.5.2 迭代與遞推法111
習題113
第4章 函數(shù)和編譯預處理119
4.1 本章導讀119
4.2 函數(shù)的定義120
4.2.1 有參函數(shù)定義120
4.2.2 無參函數(shù)121
4.2.3 函數(shù)的返回和返回值122
4.3 函數(shù)的調用123
4.3.1 形參與實參123
4.3.2 函數(shù)的原型說明124
4.4 函數(shù)的參數(shù)傳遞方式125
4.4.1 值傳遞125
4.4.2 引用傳遞126
4.5 函數(shù)的遞歸調用128
4.6 存儲類別和作用域131
4.6.1 作用域131
4.6.2 變量的存儲類別134
4.7 函數(shù)的重載、內聯(lián)、缺省參數(shù)137
4.7.1 函數(shù)的重載137
4.7.2 函數(shù)的內聯(lián)138
4.7.3 缺省參數(shù)的函數(shù)139
4.8 預處理指令與編譯預處理141
4.8.1 文件包含指令141
4.8.2 宏定義指令142
4.8.3 條件編譯指令145
4.9 程序的多文件組織146
4.10 C++庫函數(shù)148
4.11 函數(shù)調用與棧149
4.11.1 參數(shù)傳遞與棧149
4.11.2 自動變量與棧150
4.11.3 函數(shù)遞歸調用和棧151
習題153
第5章 構造數(shù)據(jù)類型159
5.1 本章導讀159
5.2 一維數(shù)組160
5.2.1 一維數(shù)組的定義160
5.2.2 一維數(shù)組的初始化162
5.2.3 數(shù)組元素的引用163
5.2.4 一維數(shù)組的應用163
5.3 二維數(shù)組168
5.3.1 二維數(shù)組的定義168
5.3.2 二維數(shù)組的初始化169
5.3.3 二維數(shù)組的應用170
5.4 數(shù)組和函數(shù)174
5.4.1 數(shù)組元素用作函數(shù)參數(shù)174
5.4.2 數(shù)組名用為函數(shù)參數(shù)175
5.5 字符數(shù)組178
5.5.1 字符數(shù)組的定義和初始化178
5.5.2 字符數(shù)組的賦值、輸入和輸出179
5.5.3 字符串與字符數(shù)組180
5.5.4 字符數(shù)組的應用181
5.6 字符串函數(shù)183
5.6.1 常用字符串處理函數(shù)183
5.6.2 字符串類變量及其應用186
5.7 數(shù)組應用187
5.7.1 選擇法排序187
5.7.2 矩陣運算190
習題191
第6章 其他構造數(shù)據(jù)類型--結構、聯(lián)合、枚舉和類197
6.1 本章導讀197
6.2 結構體類型198
6.2.1 結構體類型定義198
6.2.2 結構體類型變量的定義及其初始化199
6.2.3 結構體類型變量的引用201
6.2.4 結構體與數(shù)組202
6.2.5 結構體類型與函數(shù)203
6.3 共同體類型205
6.4 枚舉類型206
6.4.1 枚舉類型數(shù)據(jù)的定義206
6.4.2 枚舉類型的應用208
6.5 類型定義語句typedef210
6.6 類211
6.6.1 類類型的定義211
6.6.2 類的成員函數(shù)213
6.6.3 inline成員函數(shù)214
6.6.4 類與結構體的異同215
6.6.5 類的對象及其定義216
6.6.6 類和對象的簡單應用218
習題221
第7章 指針227
7.1 本章導讀227
7.2 指針228
7.2.1 指針變量的定義229
7.2.2 指針變量的引用230
7.2.3 多級指針及其定義231
7.3 指針與數(shù)組232
7.3.1 指針與一維數(shù)組232
7.3.2 指針的運算233
7.3.3 指針與二維數(shù)組236
7.3.4 指針數(shù)組238
7.3.5 指向數(shù)組的指針239
7.4 指針與函數(shù)240
7.4.1 指針作為函數(shù)參數(shù)240
7.4.2 返回值為指針的函數(shù)243
7.4.3 指向函數(shù)的指針245
7.4.4 用函數(shù)指針調用函數(shù)246
7.5 const指針247
7.6 void指針249
7.7 指針與字符串250
7.7.1 字符串的表示形式250
7.7.2 字符串指針與函數(shù)252
7.7.3 字符串指針與數(shù)組253
7.8 引用254
7.8.1 引用的定義254
7.8.2 引用和函數(shù)255
7.9 內存的動態(tài)分配和撤銷255
7.9.1 new運算符256
7.9.2 delete運算符257
7.10 指針應用258
7.10.1 鏈表258
7.10.2 約瑟夫環(huán)(Josephus)問題265
習題266
第8章 類和對象273
8.1 本章導讀273
8.2 面向對象的程序設計方法274
8.3 構造函數(shù)與析構函數(shù)276
8.3.1 構造函數(shù)的定義與使用277
8.3.2 默認構造函數(shù)278
8.3.3 構造函數(shù)和new運算符282
8.3.4 析構函數(shù)的定義與使用283
8.3.5 構造函數(shù)與類型轉化286
8.4 復制構造函數(shù)286
8.5 對象成員和類的嵌套定義289
8.5.1 對象成員289
8.5.2 類的嵌套定義290
8.6 友元函數(shù)和友元類291
8.6.1 友元函數(shù)292
8.6.2 友元類293
8.7 靜態(tài)成員296
8.7.1 靜態(tài)數(shù)據(jù)成員296
8.7.2 靜態(tài)函數(shù)成員297
8.8 共用數(shù)據(jù)的保護299
8.8.1 常對象299
8.8.2 常成員299
8.8.3 指向對象的常指針和對象的常引用300
8.9 this指針301
習題302
第9章 繼承與派生307
9.1 本章導讀307
9.2 繼承與派生的概念307
9.2.1 類的繼承與派生概念307
9.2.2 派生類的定義308
9.2.3 基類成員的訪問控制309
9.3 派生類的構造與析構函數(shù)313
9.4 沖突、支配與賦值兼容規(guī)則316
9.5 虛基類320
習題323
第10章 多態(tài)325
10.1 本章導讀325
10.2 虛函數(shù)326
10.2.1 虛函數(shù)的定義及實現(xiàn)過程326
10.2.2 虛函數(shù)實現(xiàn)過程327
10.2.3 純虛函數(shù)和抽象類330
10.3 運算符重載332
10.3.1 成員函數(shù)實現(xiàn)運算符重載及方法333
10.3.2 友元函數(shù)實現(xiàn)運算符重載及方法336
10.3.3 類型轉換函數(shù)340
10.3.4 一些特殊運算符的重載341
10.3.5 實現(xiàn)字符串類的運算符重載346
習題349
第11章 輸入輸出流類庫353
11.1 本章導讀353
11.2 流概述354
11.3 C++的基本流類體系354
11.4 標準輸入輸出流355
11.4.1 標準輸入流355
11.4.2 標準輸出流356
11.4.3 流的格式控制357
11.4.4 輸入輸出的其他成員函數(shù)361
11.4.5 提取和插入運算符重載364
11.4.6 重定向概念365
11.5 文件流366
11.5.1 文件概述366
11.5.2 文件流類體系366
11.5.3 文件的使用方法366
11.6 文本文件的使用370
11.7 二進制文件的使用374
11.7.1 二進制文件的打開和關閉374
11.7.2 二進制文件的讀寫374
11.7.3 文件的隨機訪問376
習題378
第12章 模板381
12.1 本章導讀381
12.2 函數(shù)模板和類模板381
12.2.1 函數(shù)模板的定義和使用381
12.2.2 類模板的定義和使用383
12.3 標準模板庫簡介387
12.4 模板簡單應用實例388
習題393
附錄A 標準ASCII碼表395
附錄B 常用系統(tǒng)函數(shù)397
參考文獻403