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