內容簡介
《中國
高等院校計算機基礎教育課程體系規劃教材:C++程式設計(第2版)》作者譚浩強深入調查了大學的程式設計課程的現狀和發展趨勢,參閱了國內外數十種有關C++的教材,認真分析了讀者在學習中的困難和認識規律,設計了讀者易於學習的教材體系,於2004年出版了《C++程式設計》一書。該書降低入門
起點,不需要C語言的基礎,從零起點介紹程式設計和C++。廣大師生用後反映非常好,認為該書定位準確,概念清晰,深入淺出,取捨合理,以通俗易懂的語言對C++的許多難懂的概念作了透徹而通俗的說明,大大降低了初學者學習的困難,是一本初學者學習C++的好教材。 根據教學實踐的需要,作者對該書進行了修訂,出版了本書,與第1版相比,內容更加豐富,講解更加清晰,學習更加容易,依據ANSIC++標準進行介紹,引導讀者從一開始就按C++的要求編程,而不是過多地遷就C語言的習慣。
本書把入門起點降低,讀者不需要具備C語言的基礎。本書包括14章,分為4篇:基本知識;面向過程的程式設計;基於對象的程式設計;面向對象的程式設計。本書內容全面,例題豐富,概念清晰,循序漸進,易於學習。
《C++程式設計》是依據ANSI C++標準進行介紹的,引導讀者從一開始就按標準C++的規定編程。本書配有兩本輔導教材,即《C++程式設計題解與上機指導》和《C++編程實踐指導》,全書分為4篇:基本知識;基於過程的程式設計;基於對象的程式設計;面向對象的程式設計。 本書內容全面,例題豐富,概念清晰,循序漸進,易於學習,即使沒有教師講授,讀者也能看懂本書的大部分內容。本書是學習C++的入門教材,可供各類專業學生使用,也可作為計算機培訓班的教材以及讀者自學參考。
作者簡介
譚浩強,我國著名計算機教育專家。1934年生。1958年清華大學畢業。學生時代曾擔任清華大學學生會主席、北京市人民代表。他是我國計算機普及和高校計算機基礎教育開拓者之一,現任全國高等院校計算機基礎教育研究會會長、教育部全國計算機套用技術證書考試委員會主任委員。
譚浩強教授創造了3個世界記錄:(1)20年來他(及和他人合作)共編著出版了130本計算機著作,此外主編了250多本計算機書籍,是出版科技著作數量最多的人。(2)他編著和主編的書發行量超過5000萬冊,是讀者最多的科技作家。我國平均每26人、知識分子每1.2人就擁有1本譚浩強教授編著的書。(3)他和別人合作編著的《BASIC語言》發行了1250萬冊,創科技書籍發行量的世界紀錄。此外,他編著的《C程式設計》發行了900萬冊。他曾在中央電視台主講了BASIC,FORTRAN,COBOL,Pascal,QBASIC,C,VisualBasic七種計算機語言,觀眾超過300萬人。
在我國學習計算機的人中很少有不知道譚浩強教授的。他善於用容易理解的方法和語言說明複雜的概念。許多人認為他開創了計算機書籍貼近大眾的新風,為我國的計算機普及事業做出了重要的貢獻。
譚浩強教授曾獲全國高校教學成果國家級獎、國家科技進步獎,以及北京市政府授予的“有突出貢獻專家”稱號。《計算機世界》報組織的“世紀評選”把他評為我國“20世紀最有影響的IT人物”10個人之一(排在第2位)。他的功績是把千百萬民眾帶入計算機的大門。
編輯推薦
《C++程式設計》是譚浩強教授的又一力作,依據C++標準進行介紹,引導學生學習標準C++,而不僅學習依賴於某一特定環境下的“方言化”的C++ ,教與學的新突破,學習“C++ 程式設計”從此變得容易。
本書是為已學過C語言程式設計、具有程式設計初步知識的讀者編寫的,是與作者編著的《C++面向對象程式設計》(清華大學出版社出版)一書配套的輔助教材。本書包括3個部分: 《C++面向對象程式設計》一書各章中的全部習題的參考解答;C++的上機操作,這部分介紹了在兩種典型的環境下運行C++程式的方法,即Visual C++6.0和GCC在DOS/Windows平台上的版本DJGPP(以及與之配合使用的集成軟體開發環境RHIDE);上機實驗內容與安排,這部分提出了上機實驗的指導思想和上機實驗的內容與安排,供教學參考。
隨本書贈送的光碟中包括《C++面向對象程式設計》一書中的全部例題程式,各章習題解答的程式以及DOS/Windows環境下的GCC版本(DJGPP及其配套集成環境RHIDE)。
本書可作為學習《C++面向對象程式設計》的輔助教材,也可供其他初學C++的讀者參考。
本書特色
(1)準確定位,合理取捨。
本書使讀者對C++的全貌有基本的認識,用容易理解的方法講清楚有關的基本概念和基本方法。
(2)全新體系,內容翔實。
本書以面向過程的程式設計為切入點,從編寫簡單的程式開始,循序漸進,由面向過程、基於對象到面向對象,逐步深入,符合讀者的認識規律。
(3)例題豐富,通俗易懂。
本書作者花費了很大的精力去考慮怎樣使讀者易於接受和理解,儘量用通俗易懂的方法和語言敘述複雜的概念,力求減少初學者學習C++的困難。書中所舉的程式,是從教學的角度考慮的,非常切合教學之用。
(4)體現C++標準。
本書依據C++標準進行介紹,引導學生學習標準C++,而不僅學習依賴於某一特定環境下的“方言化”的C++。
(5)配套齊全,考慮縱深。
本書的配套資源:
《C++程式設計題解與上機指導》(附光碟,包括教材中全部例題的源程式)
《C++程式編程實踐指導》(幫助學生提高編程能力)
向選用本教材的教師免費提供講課的電子演示文稿。
本書配有兩本輔導教材,即《C++程式設計題解上機指導》和《C++編程實踐指導》。本書是大學各專業學生學習C++的基礎教材,也是適於初學者學習的教材。即使沒有教師講授,讀者也能看懂本書的大部分內容。
圖書目錄
第1篇基本知識
第1章C++的初步知識
1.1從C到C++
1.2最簡單的C++程式
1.3C++程式的構成和書寫形式
1.4C++程式的編寫和實現
1.5關於C++上機實踐
習題
第2章數據類型和表達式
2.1C++的數據類型
2.2常量
2.2.1什麼是常量
2.2.2數值常量
2.2.3字元常量
2.2.4符號常量
2.3變數
2.3.1什麼是變數
2.3.2變數名規則
2.3.3定義變數
2.3.4對變數賦初值
2.3.5常變數
2.4C++的運算符
2.5算術運算符與算術表達式
2.5.1基本的算術運算符
2.5.2算術表達式和運算符的優先權與結合性
2.5.3表達式中各類數值型數據間的混合運算
2.5.4自增(++)和自減(——)運算符
2.5.5強制類型轉換運算符
2.6賦值運算符和賦值表達式
2.6.1賦值運算符
2.6.2賦值過程中的類型轉換
2.6.3複合賦值運算符
2.6.4賦值表達式
2.7逗號運算符和逗號表達式
習題
第2篇基於過程的程式設計
第3章程式設計初步
3.1基於過程的程式設計和算法
3.1.1算法的概念+
3.1.2算法的表示
3.2C++的程式結構和C++語句
3.3賦值操作
3.4C++的輸入與輸出
3.4.1輸入流與輸出流的基本操作
3.4.2在標準輸入流與輸出流中使用控制符
3.4.3用getchar和putchar函式進行字元的輸入和輸出
3.4.4用scanf和printf函式進行輸入和輸出
3.5編寫順序結構的程式
3.6關係運算和邏輯運算
3.6.1關係運算和關係表達式
3.6.2邏輯常量和邏輯變數
3.6.3邏輯運算和邏輯表達式
3.7選擇結構和if語句
3.7.1if語句的形式
3.7.2if語句的嵌套
3.7.3條件運算符和條件表達式
3.7.4多分支選擇結構與switch語句
3.7.5 編寫選擇結構的程式
3.8循環結構和循環語句
3.8.1用while語句構成循環
3.8.2用do-while語句構成循環
3.8.3用for語句構成循環
3.8.4幾種循環的比較
3.12循環的嵌套79
3.13break語句和continue語句79
3.14編寫循環結構的程式80
習題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對被調用函式的聲明和函式原型95
*4.5內置函式97
*4.6函式的重載99
*4.7函式模板102
*4.8有默認參數的函式103
4.9函式的嵌套調用105
4.10函式的遞歸調用109
4.11局部變數和全局變數112
4.11.1局部變數112
4.11.2全局變數113
4.12變數的存儲類別115
4.12.1動態存儲方式與靜態存儲方式115
4.12.2自動變數116
4.12.3用static聲明靜態局部變數116
4.12.4用register聲明暫存器變數119
4.12.5用extern聲明外部變數119
4.12.6用static聲明靜態外部變數121
4.13變數屬性小結122
4.14關於變數的聲明和定義124
4.15內部函式和外部函式125
4.15.1內部函式125
4.15.2外部函式125
4.16預處理命令127
4.16.1宏定義127
4.16.2“檔案包含”處理128
4.16.3條件編譯131
習題132
第5章數組134
5.1數組的概念134
5.2一維數組的定義和引用135
5.2.1定義一維數組135
5.2.2引用一維數組的元素135
5.2.3一維數組的初始化136
5.2.4一維數組程式舉例137
5.3二維數組的定義和引用139
5.3.1定義二維數組139
5.3.2二維數組的引用140
5.3.3二維數組的初始化140
5.3.4二維數組程式舉例142
5.4用數組名作函式參數144
5.5字元數組148
5.5.1字元數組的定義和初始化148
5.5.2字元數組的賦值與引用149
5.5.3字元串和字元串結束標誌150
5.5.4字元數組的輸入輸出151
5.5.5字元串處理函式152
5.5.6字元數組套用舉例155
*5.6C++處理字元串的方法——字元串類與字元串變數156
5.6.1字元串變數的定義和引用156
5.6.2字元串變數的運算157
5.6.3字元串數組158
5.6.4字元串運算舉例159
習題162
第6章指針164
6.1指針的概念164
6.2變數與指針166
6.2.1定義指針變數166
6.2.2引用指針變數167
6.2.3指針作為函式參數170
6.3數組與指針174
6.3.1指向數組元素的指針174
6.3.2用指針變數作函式參數接收數組地址178
6.3.3多維數組與指針180
6.4字元串與指針184
6.5函式與指針186
6.5.1用函式指針變數調用函式186
6.5.2用指向函式的指針作函式參數187
6.6返回指針值的函式188
6.7指針數組和指向指針的指針188
6.7.1指針數組的概念188
6.7.2指向指針的指針190
6.8有關指針的數據類型和指針運算的小結192
6.8.1有關指針的數據類型的小結192
6.8.2指針運算小結193
*6.9引用194
6.9.1什麼是變數的引用194
6.9.2引用的簡單使用195
6.9.3引用作為函式參數195
習題199
第7章自定義數據類型201
7.1結構體類型201
7.1.1結構體概述201
7.1.2結構體類型變數的定義方法及其初始化202
7.1.3結構體變數的引用205
7.1.4結構體數組207
7.1.5指向結構體變數的指針211
7.1.6結構體類型數據作為函式參數214
*7.1.7動態分配和撤銷記憶體的運算符new和delete217
7.2共用體219
7.2.1共用體的概念219
7.2.2對共用體變數的訪問方式220
7.2.3共用體類型數據的特點220
7.3枚舉類型222
7.4用typedef聲明類型225
習題227第3篇基於對象的程式設計第8章類和對象231
8.1面向對象程式設計方法概述231
8.1.1什麼是面向對象的程式設計231
8.1.2面向對象程式設計的特點234
8.1.3類和對象的作用235
8.1.4面向對象的軟體開發236
8.2類的聲明和對象的定義238
8.2.1類和對象的關係238
8.2.2聲明類類型238
8.2.3定義對象的方法240
8.2.4類和結構體類型的異同242
8.3類的成員函式243
8.3.1成員函式的性質243
8.3.2在類外定義成員函式244
8.3.3inline成員函式245
8.3.4成員函式的存儲方式246
8.4對象成員的引用248
8.4.1通過對象名和成員運算符訪問對象中的成員248
8.4.2通過指向對象的指針訪問對象中的成員249
8.4.3通過對象的引用變數來訪問對象中的成員249
8.5類的封裝性和信息隱蔽249
8.5.1公用接口與私有實現的分離249
8.5.2類聲明和成員函式定義的分離251
8.5.3面向對象程式設計中的幾個名詞254
8.6類和對象的簡單套用舉例254
習題261
第9章關於類和對象的進一步討論263
9.1構造函式263
9.1.1對象的初始化263
9.1.2構造函式的作用264
9.1.3帶參數的構造函式266
9.1.4用參數初始化表對數據成員初始化267
9.1.5構造函式的重載267
9.1.6使用默認參數的構造函式269
9.2析構函式272
9.3調用構造函式和析構函式的順序274
9.4對象數組275
9.5對象指針277
9.5.1指向對象的指針277
9.5.2指向對象成員的指針278
9.5.3this指針281
9.6共用數據的保護282
9.6.1常對象283
9.6.2常對象成員284
9.6.3指向對象的常指針285
9.6.4指向常對象的指針變數285
9.6.5對象的常引用289
9.6.6const型數據的小結290
9.7對象的動態建立和釋放290
9.8對象的賦值和複製291
9.8.1對象的賦值291
9.8.2對象的複製293
9.9靜態成員295
9.9.1靜態數據成員296
9.9.2靜態成員函式298
9.10友元301
9.10.1友元函式301
9.10.2友元類305
9.11類模板306
習題310
第10章運算符重載314
10.1什麼是運算符重載314
10.2運算符重載的方法316
10.3重載運算符的規則318
10.4運算符重載函式作為類成員函式和友元函式320
10.5重載雙目運算符323
10.6重載單目運算符328
10.7重載流插入運算符和流提取運算符331
10.7.1重載流插入運算符“<<”331
10.7.2重載流提取運算符“>>”333
10.8不同類型數據間的轉換335
10.8.1標準類型數據間的轉換335
10.8.2轉換構造函式336
10.8.3類型轉換函式338
習題343第4篇面向對象的程式設計第11章繼承與派生347
11.1繼承與派生的概念347
11.2派生類的聲明方式350
11.3派生類的構成351
11.4派生類成員的訪問屬性352
11.4.1公用繼承353
11.4.2私有繼承355
11.4.3保護成員和保護繼承358
11.4.4多級派生時的訪問屬性361
11.5派生類的構造函式和析構函式363
11.5.1簡單的派生類的構造函式363
11.5.2有子對象的派生類的構造函式366
11.5.3多層派生時的構造函式369
11.5.4派生類構造函式的特殊形式372
11.5.5派生類的析構函式372
11.6多重繼承373
11.6.1聲明多重繼承的方法373
11.6.2多重繼承派生類的構造函式373
11.6.3多重繼承引起的二義性問題376
11.6.4虛基類379
11.7基類與派生類的轉換384
11.8繼承與組合388
11.9繼承在軟體開發中的重要意義389
習題390
第12章多態性與虛函式395
12.1多態性的概念395
12.2一個典型的例子396
12.3虛函式401
12.3.1虛函式的作用401
12.3.2靜態關聯與動態關聯405
12.3.3在什麼情況下應當聲明虛函式406
12.3.4虛析構函式407
12.4純虛函式與抽象類408
12.4.1純虛函式408
12.4.2抽象類409
12.4.3套用實例410
習題416
第13章輸入輸出流417
13.1C++的輸入和輸出417
13.1.1輸入輸出的含義417
13.1.2C++的I/O對C的發展——類型安全和
可擴展性417
13.1.3C++的輸入輸出流418
13.2標準輸出流422
13.2.1cout,cerr和clog流422
13.2.2格式輸出425
13.2.3用流成員函式put輸出字元429
13.3標準輸入流430
13.3.1cin流430
13.3.2用於字元輸入的流成員函式432
13.3.3istream類的其他成員函式436
13.4檔案操作與檔案流439
13.4.1檔案的概念439
13.4.2檔案流類與檔案流對象440
13.4.3檔案的打開與關閉441
13.4.4對ASCII檔案的操作443
13.4.5對二進制檔案的操作448
13.5字元串流453
習題458
第14章C++工具459
14.1異常處理459
14.1.1異常處理的任務459
14.1.2異常處理的方法460
14.1.3在函式聲明中進行異常情況指定467
14.1.4在異常處理中處理析構函式467
14.2命名空間469
14.2.1為什麼需要命名空間469
14.2.2什麼是命名空間473
14.2.3使用命名空間解決名字衝突475
14.2.4使用命名空間成員的方法477
14.2.5無名的命名空間479
14.2.6標準命名空間std479
14.3使用早期的函式館480
習題481
附錄A常用字元與ASCII代碼對照表483
附錄B運算符與結合性484
參考文獻486