本書結合C++面向對象程序設計的特點以及初學者學習的難點,構建了實驗、課程設計案例與課程設計項目,所有程序都在Visual C++ 6.0、Visual C++ 2005、Visual C++ 2005 Express、Dev-C++和MinGW Developer Studio開發(fā)環(huán)境中進行了嚴格的測試,在作者教學網(wǎng)站上提供了大量的教學支持內(nèi)容。
全書共分為3個部分,第I部分包括8個實驗,每個實驗都包括實驗目的、實驗內(nèi)容、實驗提示與實驗步驟。第II部分為課程設計案例,包括了9個課程設計案例,每個案例都包括目的與要求、工具與準備工作、分析、實現(xiàn)步驟、測試與結論,以及思考與感悟。第III部分為課程設計項目,共包含9個項目,這些項目難易程度不同,簡單的項目可以一個人單獨完成,復雜的項目可由幾個人共同完成,每個項目都給出了目的與要求,以及實現(xiàn)提示,讀者可參考課程設計案例與提示實現(xiàn)課程設計,讀者應在完成基本任務的前提下,對程序加以改進和提高。
通過本書的學習,讀者能迅速提高C++面向對象程序設計的能力,經(jīng)過適當?shù)倪x擇,本書可作為C++面向對象程序設計課程實驗與課程設計的教材,本書可作為高等院校計算機及相關專業(yè)的教材,也可供其他從事軟件開發(fā)工作的讀者參考使用,本書不但適合高等學校學生使用,同時也適合初學程序設計者或有一定編程實踐基礎、希望突破編程難點的讀者作為自學教材。
C++面向對象程序設計是高等學校普遍開設的一門計算機基礎課程,C++面向對象程序設計應用非常廣泛,實用性很強,在學習時不僅需要掌握C++言的編程規(guī)則和方法,更重要的是要掌握如何應用這些規(guī)則和方法。在理論學習的同時加強實踐訓練,才能達到事半功倍的效果。本書作者一直從事C++面向程序設計的一線教學、研究和軟件開發(fā)工作,理解初學者學習C++語言的困難,積累并總結了豐富的C++教學的經(jīng)驗,為了對學習C++面向對象程序設計的讀者有所幫助和指導,特編寫此書。
全書共分為3個部分,第I部分為實驗,第II部分為課程設計案例,第III部分為課程設計項目。
第I部分包括8個實驗,包含了C++語法知識點的內(nèi)容,有的實驗比例簡單(例如實驗1簡單程序開發(fā)),有的實驗包含了比較綜合的語法點(例如實驗5虛函數(shù)與多態(tài)性的第6題包含類、繼承和抽象類等內(nèi)容),每個實驗都包括實驗目的、實驗內(nèi)容、實驗提示與實驗步驟。根據(jù)作者的教學經(jīng)驗,初學者通常對于應用C++語言編寫程序感到無從下手,考試時這部分丟分較多,為了對讀者所有幫助,實驗內(nèi)容一般都包含有閱讀程序與調(diào)試程序,程序改錯,程序填空與編寫程序方面的題目,這些題目也是C++面向對象程序設計考試要涉及的題型,教師可參考其中的題目作適當修改設計考試題,因此做好實驗對考試有極大的幫助;實驗提示信息中有編程提示、重要內(nèi)容提示或者出錯信息提示;實驗步驟以一個實際題目為例給出具體而實用的指導,以便讓初學者不至面對實驗題目而束手無策。
第II部分為課程設計案例。課程設計是C++語言程序設計的一個重要環(huán)節(jié),與實驗相比,課程設計通常是以接近實際項目的訓練,可以在學習理論知識的同時進一步提高解決實際問題的能力,強化綜合應用能力,擴充知識,開闊視野。課程設計的項目都有一定的難度,初學者面對課程設計項目通常有不知所措的感覺,為此特設計9個課程設計案例,每個案例都包括目的與要求、工具與準備工作、分析、實現(xiàn)步驟、測試與結論以及思考與感悟。讀者應認真閱讀每個案例,最好多讀幾遍,這樣效果更好,不斷思考每個案例的實現(xiàn)方法,同時也應參考實現(xiàn)步驟上機實現(xiàn)每個案例。課程設計案例內(nèi)容豐富,包括了編程工具的項目(例如實用程序工具包),讀者感興趣的項目(例如紙牌游戲-- "21點”) ,讀者感興趣但感到無從下手的程序(例如無符號大整數(shù)計算器),解決實際問題的項目(例如電話號碼簿), C++的綜合應用的項目(例如公司員工管理,包含了類,抽象類,文件管理等內(nèi)容),還包括了對語言增加的新的功能以及完善C++編譯器來加入實驗性結構的程序(例如擴展C++) ,通過學習對培養(yǎng)讀者面向對象程序設計應用能力方面大有裨益,為將來從事軟件開發(fā)打下良好的基礎。
第III部分為課程設計項目,課程設計是C++語言程序設計的一個重要環(huán)節(jié),通過課程設計的綜合訓練,可以在學習理論知識的同時進一步提高解決實際問題的能力,強化綜合應用能力,擴充知識,開闊視野,本書課程設計部分共有9個項目,這些項目難易程度不同,簡單的項目可以一個人單獨完成,復雜的項目可由幾個人共同完成,大部分項目都容易引起讀者的興趣(例如設計萬年歷、石頭-剪刀-布游戲),有些項目是對課程設計案例項目的進一步完善(例如擴展C++新特征),有的項目與課程設計案例項目設計方法相似(例如銷售公司員工管理)。每個項目都給出了目的與要求,以及實現(xiàn)提示,讀者可參考課程設計案例與提示實現(xiàn)課程設計。
本書討論的程序都在Visual C++ 6.0、Visual C++ 2005、Visual C++ 2005 Express、Dev-C++和MinGW Developer Studio開發(fā)環(huán)境中進行了嚴格測試,并向教師提供了完整的程序,讀者可根據(jù)自已的理解,選擇熟悉的開發(fā)環(huán)境,開發(fā)出功能更強的程序。
對于C++的編譯器的問題,在C++之外的任何編程語言中,編譯器都沒有受到過如此重視。這是因為C++是一門非常復雜的語言,以至于編譯器也難以構造,常用的編譯器不能完全符合C++標準,下面介紹一些常用的優(yōu)秀C++編譯器。
(1) Visual C++編譯器。由微軟開發(fā),現(xiàn)在主要流行于Visual C++ 6.0、Visual C++ 2005以及Visual C++ 2005 Express,特點是集成開發(fā)環(huán)境用戶界面友好,信息提示準確,調(diào)試方便,對模板支持最完善;Visual C++ 6.0對硬件環(huán)境要求低,現(xiàn)在安裝計算機最多,但對標準C++兼容只有83.43%, Visual C++ 2005與Visual C++ 2005 Express在軟件提示信息上做了進一步的優(yōu)化與改進,并且對標準C++兼容達到了98%以上的程度,但對硬件的要求較高;還有Visual C++ 2005 Express是一種輕量級的Visual C++軟件,易于使用。對于編程愛好者、學生和初學者來說是很好的編程工具,微軟在2006年4月22日正式宣布 Visual Studio 2005 Express版永久免費。
(2) GCC編譯器。著名的開源C++編譯器。它是類UNIX操作系統(tǒng)(例如Linux)下編寫C++程序的首選,有非常好的可移植性,可以在非常廣泛的平臺上使用,也是編寫跨平臺、嵌入式程序很好的選擇。GCC 3.3與標準C++兼容度大概能夠達到96.15%,F(xiàn)有已有一些移植在Windows環(huán)境下使用GCC編譯器的IDE(集成開發(fā)環(huán)境),例如Dev-C++與MinGW Developer Studio,其中Dev-C++是能夠讓GCC在Windows下運行的集成開發(fā)環(huán)境,提供了與專業(yè)IDE相媲美的語法高亮、代碼提示,調(diào)試等功能;MinGW Developer Studio是跨平臺下的GCC集成開發(fā)環(huán)境。目前支持 Windows、Linux和 FreeBSD;根據(jù)作者的實際使用,感覺使用GCC編譯器的IDE錯誤信息提示的智能較低,還有就是對模板支持較差,對語法檢查較嚴格,在Visual C++編譯器中編譯通過的程序可能在GCC編譯器的IDE中還會顯示有錯誤信息。
本書所有程序都同時在Visual C++ 6.0、Visual C++ 2005、Visual C++ 2005 Express、Dev-C++和MinGW Developer Studio中通過測試。讀者可根據(jù)實際情況選擇適當?shù)木幾g器,建議選擇Visual C++ 6.0,在附錄B中還詳細介紹了Visual C++ 6.0、Visual C++ 2005、Visual C++ 2005 Express、Dev-C++和MinGW Developer Studio的使用方法。
為滿足不同層次的教學需求,本教材使用了分層的思想,分層方法如下:沒加有星號(*)的部分是基本內(nèi)容,適合所有讀者學習;加有星號(*)的部分適合計算機專業(yè)的讀者深入學習的選學部分;加有雙星號(**)的部分適合于感興趣的同學研究,尤其適合于那些有志于ACM競賽的讀者加以深入研究。作者為本書提供了全面的教學支持,如果在教學或學習過程中發(fā)現(xiàn)與本書有關的任何問題都可以與作者聯(lián)系:youhongyue@cs.scu.edu.cn,作者將盡力滿足各位的要求,并可能將解答公布在作者的教學網(wǎng)站http://cs.scu.edu.cn/~youhongyue上。在教學網(wǎng)站上還將提供如下內(nèi)容。
① 向教師提供所有實驗與課程設計在Visual C++ 6.0、Visual C++ 2005、Visual C++ 2005 Express、Dev-C++和MinGW Developer Studio開發(fā)環(huán)境中的具體程序實現(xiàn),今后還會提供當時流行的C++開發(fā)環(huán)境的具體程序實現(xiàn),對一般讀者將在每學期的期末在主頁網(wǎng)上公布解壓口令。
② 提供所有課程設計案例在Visual C++ 6.0、Visual C++ 2005、Visual C++ 2005Express、Dev-C++和MinGW Developer Studio開發(fā)環(huán)境中的具體程序實現(xiàn),今后還會提供當時流行的C++開發(fā)環(huán)境的具體程序實現(xiàn)。
③ 高級語言程序設計問答專欄。
④ 提供本書作者開發(fā)的軟件包。
⑤ 提供全國計算機等級考試二級C++上機考試輔導。
⑥ 提供C++面向對象程序設計相關的其他資料(例如Dev-C++與MinGW Developer Studio軟件,流行免費C++編譯器的下載網(wǎng)址).
希望各位讀者能夠抽出寶貴的時間將對本教材的建議或意見,當然也可以發(fā)表對國內(nèi)外的C++面向程序設計課程教學的任何意見寄給作者,你的意見將是我們再版修訂教材的重要參考,作者將發(fā)自內(nèi)心地感謝這些讀者。
鄒昌文、王文昌、周焯華、胡開文、沈潔、周德華、歐陽、文濤、文芝明和文波等人做了大量的工作,包括調(diào)試程序,提供參考資料,并參加本書部分章節(jié)的編寫工作。
本書的出版要感謝清華大學出版社各位編輯及評審專家,他們?yōu)楸緯某霭鎯A注了大量熱情,他們具有前瞻性的眼光才讓讀者有機會看到本書。
盡管作者有良好而負責任的嚴格態(tài)度,并盡了最大努力,但由于作者水平有限,書中難免有不妥之處,因此,敬請各位讀者不吝賜教,以便作者有一個提高的機會,并在再版時盡力采用讀者的意見,提高本書的質量。
作者2009年2月
第I部分 實驗1
實驗1 簡單程序開發(fā)1
1.1 實驗目的1
1.2 實驗工具與準備工作1
1.3 實驗內(nèi)容1
1.4 實驗提示4
1.5 實驗步驟4
1.6 測試與結論5
實驗2 類和對象5
2.1 實驗目的5
2.2 實驗工具與準備工作6
2.3 實驗內(nèi)容6
2.4 實驗提示9
2.5 實驗步驟10
2.6 測試與結論12
實驗3 繼承與派生12
3.1 實驗目的12
3.2 實驗工具與準備工作12
3.3 實驗內(nèi)容12
3.4 實驗提示17
3.5 實驗步驟18
3.6 測試與結論20
實驗4 函數(shù)重載與運算符重載21
4.1 實驗目的21
4.2 實驗工具與準備工作21
4.3 實驗內(nèi)容21
4.4 實驗提示24
4.5 實驗步驟25
4.6 測試與結論28
實驗5 虛函數(shù)與多態(tài)性29
5.1 實驗目的29
5.2 實驗工具與準備工作29
5.3 實驗內(nèi)容29
5.4 實驗提示33
5.5 實驗步驟33
5.6 測試與結論36
實驗6 C++流和文件流36
6.1 實驗目的36
6.2 實驗工具與準備工作36
6.3 實驗內(nèi)容36
6.4 實驗提示40
6.5 實驗步驟40
6.6 測試與結論43
實驗7 模板43
7.1 實驗目的43
7.2 實驗工具與準備工作43
7.3 實驗內(nèi)容43
7.4 實驗提示46
7.5 實驗步驟47
7.6 測試與結論49
實驗8 類型轉換、異常處理和命名空間50
8.1 實驗目的50
8.2 實驗工具與準備工作50
8.3 實驗內(nèi)容50
8.4 實驗提示53
8.5 實驗步驟54
8.6 測試與結論56第II部分 課程設計案例57
案例1 實用程序工具包57
1.1 目的與要求57
1.2 工具與準備工作58
1.3 分析58
1.4 實現(xiàn)步驟62
1.5 測試與結論67
1.6 思考與感悟67
案例2 "21點”紙牌游戲68
2.1 目的與要求68
2.2 工具與準備工作68
2.3 分析69
2.4 實現(xiàn)步驟70
2.5 測試與結論76
2.6 思考與感悟77
案例3 皇后問題77
3.1 目的與要求77
3.2 工具與準備工作77
3.3 分析77
3.4 實現(xiàn)步驟80
3.5 測試與結論83
3.6 思考與感悟85
案例4 分數(shù)計算器85
4.1 目的與要求85
4.2 工具與準備工作85
4.3 分析85
4.4 實現(xiàn)步驟87
4.5 測試與結論92
4.6 思考與感悟92
案例5 無符號大整數(shù)計算器92
5.1 目的與要求92
5.2 工具與準備工作93
5.3 分析93
5.4 實現(xiàn)步驟97
5.5 測試與結論104
5.6 思考與感悟104
案例6 電話號碼簿105
6.1 目的與要求105
6.2 工具與準備工作105
6.3 分析105
6.4 實現(xiàn)步驟108
6.5 測試與結論114
6.6 思考與感悟116
案例7 公司員工管理116
7.1 目的與要求116
7.2 工具與準備工作117
7.3 分析117
7.4 實現(xiàn)步驟118
7.5 測試與結論129
7.6 思考與感悟132
案例8 擴展C++132
8.1 目的與要求132
8.2 工具與準備工作134
8.3 分析134
8.4 實現(xiàn)步驟140
8.5 測試與結論152
8.6 思考與感悟154第III部分 課程設計項目155
項目1 石頭-剪刀-布游戲155
1.1 目的與要求155
1.2 實現(xiàn)提示155
項目2 骰子游戲156
2.1 目的與要求156
2.2 實現(xiàn)提示156
項目3 武士巡邏問題157
3.1 目的與要求157
3.2 實現(xiàn)提示157
項目4 復數(shù)計算器157
4.1 目的與要求157
4.2 實現(xiàn)提示158
項目5 帶符號大整數(shù)計算器158
5.1 目的與要求158
5.2 實現(xiàn)提示158
項目6 萬年歷159
6.1 目的與要求159
6.2 實現(xiàn)提示161
項目7 音像店162
7.1 目的與要求162
7.2 實現(xiàn)提示163
項目8 銷售公司員工管理163
8.1 目的與要求163
8.2 實現(xiàn)提示163
項目9 擴展C++新特征163
9.1 目的與要求163
9.2 實現(xiàn)提示164附錄A 本書的軟件包165附錄B 流行C++編譯器的使用方法166
B.1 Visual C++ 6.0166
B.2 Visual C++ 2005171
B.3 Visual C++ 2005 Express177
B.4 Dev-C++184
B.5 MinGW Developer Studio189附錄C 實驗報告格式195附錄D 課程設計報告格式196參考文獻197