本書(shū)較為全面地介紹了程序設(shè)計(jì)語(yǔ)言C++的基本概念、基本語(yǔ)法和基本程序思想。全書(shū)共分為12章和兩個(gè)附錄,內(nèi)容包括計(jì)算機(jī)基礎(chǔ)知識(shí)、C++基本概念、流程控制語(yǔ)句、函數(shù)和編譯預(yù)處理、構(gòu)造數(shù)據(jù)類(lèi)型、指針、類(lèi)和對(duì)象、繼承與派生、多態(tài)、輸入輸出流類(lèi)庫(kù)、模板。
本書(shū)的寫(xiě)法遵循了計(jì)算機(jī)中“自頂向下”的思維方式,在整體上自上而下,由點(diǎn)到面,由一般到具體,由簡(jiǎn)單到復(fù)雜地展開(kāi)。本書(shū)有大量精選的例題以及對(duì)例題的解析,還有大量反映C++概念和語(yǔ)法的習(xí)題。
本書(shū)可以作為大專(zhuān)院校理工科學(xué)生學(xué)習(xí)C++語(yǔ)言的教材,也可以作為計(jì)算機(jī)二級(jí)考試的參考書(shū)。
計(jì)算機(jī)語(yǔ)言是現(xiàn)代大學(xué)生的必修課。各高校都開(kāi)設(shè)了計(jì)算機(jī)語(yǔ)言課,從Basic、Fortran、Pascal,到C,再到現(xiàn)在的C++. C++是一種重要的計(jì)算機(jī)語(yǔ)言,它特別適合開(kāi)發(fā)大型系統(tǒng)程序,它的機(jī)制獨(dú)特,功能強(qiáng)大,高效而實(shí)用,C++引導(dǎo)著程序設(shè)計(jì)的潮流。在計(jì)算機(jī)基礎(chǔ)教學(xué)領(lǐng)域中,C++教學(xué)蓬勃發(fā)展,洶涌的勢(shì)頭大有迅速取代C語(yǔ)言的勢(shì)頭。
在大學(xué)中,初學(xué)C++的人說(shuō)C++難學(xué),初教C++的人說(shuō)C++難教。C++的確難學(xué)難教,難點(diǎn)之一是計(jì)算機(jī)語(yǔ)言的思維模式。它是強(qiáng)邏輯化的,但又不同于數(shù)學(xué)的邏輯,它的邏輯是建立在馮·諾依曼原理之上的,也建立在離散演繹的特色之上。它以一組語(yǔ)法為基礎(chǔ),以邏輯為手段。難點(diǎn)之二是計(jì)算機(jī)語(yǔ)言也是語(yǔ)言,學(xué)習(xí)語(yǔ)言需要大量記憶,也需要靈感,這讓學(xué)習(xí)理工科的學(xué)生不易適應(yīng)。難點(diǎn)之三是C++的個(gè)性。C++確實(shí)有很強(qiáng)的個(gè)性,數(shù)據(jù)類(lèi)型豐富、語(yǔ)法現(xiàn)象繁多、嚴(yán)謹(jǐn)而又靈活。學(xué)習(xí)C++需要大量的時(shí)間和精力。難點(diǎn)之四是學(xué)習(xí)C++大多是剛?cè)氪髮W(xué)校門(mén)的一年級(jí)學(xué)生,缺乏學(xué)習(xí)經(jīng)驗(yàn),對(duì)于這門(mén)全新、枯燥、龐大的課程,心有余而力不足。
本書(shū)作者都是從事高校計(jì)算機(jī)語(yǔ)言教學(xué)的專(zhuān)家,有著大型軟件設(shè)計(jì)經(jīng)驗(yàn)。對(duì)高等教育熟悉,對(duì)C++理解深刻,對(duì)大學(xué)生心理、思維習(xí)慣、學(xué)習(xí)的困惑有所了解,是編寫(xiě)這本書(shū)的基礎(chǔ)。本書(shū)的讀者群是初次學(xué)習(xí)計(jì)算機(jī)語(yǔ)言的大學(xué)生,本書(shū)也可作為自學(xué)C++的參考書(shū)。
本書(shū)在結(jié)構(gòu)上和現(xiàn)有C++教科書(shū)都不相同,詳盡而不唆,專(zhuān)業(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ī)語(yǔ)言及其發(fā)展、Windows操作系統(tǒng)、算法和數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)。第2章~第7章介紹了C++面向過(guò)程程序設(shè)計(jì),其中在第6章中初步介紹了類(lèi)。第8章~第12章介紹了C++面向?qū)ο蟪绦蛟O(shè)計(jì)。本書(shū)不是用來(lái)介紹Visual C++ 6.0的,但書(shū)中C++部分所有例題均在Visual C++6.0下調(diào)試通過(guò),其例題在BC下也能正確編譯運(yùn)行。關(guān)于Visual C++中的MFC等有關(guān)知識(shí),將在配套出版的《C++課程設(shè)計(jì)》一書(shū)中介紹。 本書(shū)的寫(xiě)法遵循了計(jì)算機(jī)中“自頂向下”的思維方式,在整體上自上而下,由點(diǎn)到面,由一般到具體,由簡(jiǎn)單到復(fù)雜地展開(kāi)。每章的第1節(jié)都是導(dǎo)讀,導(dǎo)讀部分簡(jiǎn)明介紹了本章的內(nèi)容以及與前面知識(shí)的聯(lián)系,從而幫助讀者從整體上俯視該章的知識(shí)。在細(xì)節(jié)知識(shí)的介紹上則由具體到一般,引導(dǎo)讀者從具體的案例中提煉出一般性,做到舉一反三。
本書(shū)的例題都是經(jīng)過(guò)精選的C++經(jīng)典題目,每個(gè)題目都能說(shuō)明一個(gè)問(wèn)題,介紹一個(gè)知識(shí)點(diǎn)或一種算法,程序中有大量的注釋?zhuān)兄谧x者思考和分析問(wèn)題。其中許多題目頗具趣味,可以提高讀者學(xué)習(xí)C++的興趣。
本書(shū)的習(xí)題部分也是本書(shū)的一大特色,在題型上與現(xiàn)在流行的考試題型(包括等級(jí)考試題型)保持一致,有選擇、填空、閱讀程序、完善程序和編寫(xiě)程序等多個(gè)方面;在內(nèi)容上,包括C++的概念、語(yǔ)法、算法、技巧等所有C++語(yǔ)言要素,且題量豐富。
本書(shū)共有12章,第1章由徐冬梅老師編寫(xiě),第2章~第4章和附錄由何鐵軍老師編寫(xiě),第5章~第7章由朱金付老師編寫(xiě),第8章、第9章由柏毅老師編寫(xiě),第10章~第12章由鄭雪清老師編寫(xiě)。最后由朱金付老師統(tǒng)稿。朱敏教授審閱了全書(shū)并做了大量的指導(dǎo)工作。
本書(shū)和同期出版的《C++程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)書(shū)》、已經(jīng)出版的《C++程序設(shè)計(jì)解析》(清華大學(xué)出版社,ISBN: 978-7-302-16188-2)以及即將出版的《C++課程設(shè)計(jì)》構(gòu)成一個(gè)基本的C++學(xué)習(xí)教材集合。學(xué)生通過(guò)這些書(shū)的綜合學(xué)習(xí),可以在相當(dāng)程度上掌握C++的基本概念、體系結(jié)構(gòu)和程序設(shè)計(jì)基本方法,為將來(lái)進(jìn)一步學(xué)習(xí)計(jì)算機(jī)語(yǔ)言奠定深厚的基礎(chǔ)。
在日常的教學(xué)活動(dòng)中,學(xué)生提出的很多疑難問(wèn)題,在作業(yè)和考試中暴露出的問(wèn)題,都給了作者許多有益的啟發(fā),也是作者編寫(xiě)本書(shū)的動(dòng)力。但是本書(shū)作者所接觸的學(xué)生群有限,對(duì)C++的教學(xué)理解尚有局限性,加上本書(shū)成書(shū)倉(cāng)促,書(shū)中難免有許多不足甚至是錯(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ì)語(yǔ)言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ù)類(lèi)型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語(yǔ)言與C++語(yǔ)言簡(jiǎn)介54
2.2.1 C語(yǔ)言與C++的起源54
2.2.2 第一個(gè)C++源程序55
2.2.3 編譯、調(diào)試、運(yùn)行程序56
2.2.4 Visual C++集成開(kāi)發(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ù)類(lèi)型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 類(lèi)型轉(zhuǎn)換76
2.8 C++語(yǔ)句78
2.9 簡(jiǎn)單輸入、輸出78
2.9.1 cin78
2.9.2 cout81
習(xí)題83
第3章 流程控制語(yǔ)句87
3.1 本章導(dǎo)讀87
3.2 選擇結(jié)構(gòu)語(yǔ)句88
3.2.1 if語(yǔ)句88
3.2.2 switch語(yǔ)句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í)行順序的語(yǔ)句107
3.4.1 break語(yǔ)句107
3.4.2 continue語(yǔ)句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 無(wú)參函數(shù)121
4.2.3 函數(shù)的返回和返回值122
4.3 函數(shù)的調(diào)用123
4.3.1 形參與實(shí)參123
4.3.2 函數(shù)的原型說(shuō)明124
4.4 函數(shù)的參數(shù)傳遞方式125
4.4.1 值傳遞125
4.4.2 引用傳遞126
4.5 函數(shù)的遞歸調(diào)用128
4.6 存儲(chǔ)類(lèi)別和作用域131
4.6.1 作用域131
4.6.2 變量的存儲(chǔ)類(lèi)別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++庫(kù)函數(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ù)類(lèi)型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 字符串類(lèi)變量及其應(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ù)類(lèi)型--結(jié)構(gòu)、聯(lián)合、枚舉和類(lèi)197
6.1 本章導(dǎo)讀197
6.2 結(jié)構(gòu)體類(lèi)型198
6.2.1 結(jié)構(gòu)體類(lèi)型定義198
6.2.2 結(jié)構(gòu)體類(lèi)型變量的定義及其初始化199
6.2.3 結(jié)構(gòu)體類(lèi)型變量的引用201
6.2.4 結(jié)構(gòu)體與數(shù)組202
6.2.5 結(jié)構(gòu)體類(lèi)型與函數(shù)203
6.3 共同體類(lèi)型205
6.4 枚舉類(lèi)型206
6.4.1 枚舉類(lèi)型數(shù)據(jù)的定義206
6.4.2 枚舉類(lèi)型的應(yīng)用208
6.5 類(lèi)型定義語(yǔ)句typedef210
6.6 類(lèi)211
6.6.1 類(lèi)類(lèi)型的定義211
6.6.2 類(lèi)的成員函數(shù)213
6.6.3 inline成員函數(shù)214
6.6.4 類(lèi)與結(jié)構(gòu)體的異同215
6.6.5 類(lèi)的對(duì)象及其定義216
6.6.6 類(lèi)和對(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)分配和撤銷(xiāo)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)問(wèn)題265
習(xí)題266
第8章 類(lèi)和對(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ù)與類(lèi)型轉(zhuǎn)化286
8.4 復(fù)制構(gòu)造函數(shù)286
8.5 對(duì)象成員和類(lèi)的嵌套定義289
8.5.1 對(duì)象成員289
8.5.2 類(lèi)的嵌套定義290
8.6 友元函數(shù)和友元類(lèi)291
8.6.1 友元函數(shù)292
8.6.2 友元類(lèi)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 類(lèi)的繼承與派生概念307
9.2.2 派生類(lèi)的定義308
9.2.3 基類(lèi)成員的訪問(wèn)控制309
9.3 派生類(lèi)的構(gòu)造與析構(gòu)函數(shù)313
9.4 沖突、支配與賦值兼容規(guī)則316
9.5 虛基類(lèi)320
習(xí)題323
第10章 多態(tài)325
10.1 本章導(dǎo)讀325
10.2 虛函數(shù)326
10.2.1 虛函數(shù)的定義及實(shí)現(xiàn)過(guò)程326
10.2.2 虛函數(shù)實(shí)現(xiàn)過(guò)程327
10.2.3 純虛函數(shù)和抽象類(lèi)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 類(lèi)型轉(zhuǎn)換函數(shù)340
10.3.4 一些特殊運(yùn)算符的重載341
10.3.5 實(shí)現(xiàn)字符串類(lèi)的運(yùn)算符重載346
習(xí)題349
第11章 輸入輸出流類(lèi)庫(kù)353
11.1 本章導(dǎo)讀353
11.2 流概述354
11.3 C++的基本流類(lèi)體系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 文件流類(lèi)體系366
11.5.3 文件的使用方法366
11.6 文本文件的使用370
11.7 二進(jìn)制文件的使用374
11.7.1 二進(jìn)制文件的打開(kāi)和關(guān)閉374
11.7.2 二進(jìn)制文件的讀寫(xiě)374
11.7.3 文件的隨機(jī)訪問(wèn)376
習(xí)題378
第12章 模板381
12.1 本章導(dǎo)讀381
12.2 函數(shù)模板和類(lèi)模板381
12.2.1 函數(shù)模板的定義和使用381
12.2.2 類(lèi)模板的定義和使用383
12.3 標(biāo)準(zhǔn)模板庫(kù)簡(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