本书结合C++面向对象程序设计的特点以及初学者学习的难点,构建了实验、课程设计案例与课程设计项目,所有程序都在Visual C++ 6.0、Visual C++ 2005、Visual C++ 2005 Express、Dev-C++和MinGW Developer Studio开发环境中进行了严格的测试,在作者教学网站上提供了大量的教学支持内容。
全书共分为3个部分,第I部分包括8个实验,每个实验都包括实验目的、实验内容、实验提示与实验步骤。第II部分为课程设计案例,包括了9个课程设计案例,每个案例都包括目的与要求、工具与准备工作、分析、实现步骤、测试与结论,以及思考与感悟。第III部分为课程设计项目,共包含9个项目,这些项目难易程度不同,简单的项目可以一个人单独完成,复杂的项目可由几个人共同完成,每个项目都给出了目的与要求,以及实现提示,读者可参考课程设计案例与提示实现课程设计,读者应在完成基本任务的前提下,对程序加以改进和提高。
通过本书的学习,读者能迅速提高C++面向对象程序设计的能力,经过适当的选择,本书可作为C++面向对象程序设计课程实验与课程设计的教材,本书可作为高等院校计算机及相关专业的教材,也可供其他从事软件开发工作的读者参考使用,本书不但适合高等学校学生使用,同时也适合初学程序设计者或有一定编程实践基础、希望突破编程难点的读者作为自学教材。
C++面向对象程序设计是高等学校普遍开设的一门计算机基础课程,C++面向对象程序设计应用非常广泛,实用性很强,在学习时不仅需要掌握C++言的编程规则和方法,更重要的是要掌握如何应用这些规则和方法。在理论学习的同时加强实践训练,才能达到事半功倍的效果。本书作者一直从事C++面向程序设计的一线教学、研究和软件开发工作,理解初学者学习C++语言的困难,积累并总结了丰富的C++教学的经验,为了对学习C++面向对象程序设计的读者有所帮助和指导,特编写此书。
全书共分为3个部分,第I部分为实验,第II部分为课程设计案例,第III部分为课程设计项目。
第I部分包括8个实验,包含了C++语法知识点的内容,有的实验比例简单(例如实验1简单程序开发),有的实验包含了比较综合的语法点(例如实验5虚函数与多态性的第6题包含类、继承和抽象类等内容),每个实验都包括实验目的、实验内容、实验提示与实验步骤。根据作者的教学经验,初学者通常对于应用C++语言编写程序感到无从下手,考试时这部分丢分较多,为了对读者所有帮助,实验内容一般都包含有阅读程序与调试程序,程序改错,程序填空与编写程序方面的题目,这些题目也是C++面向对象程序设计考试要涉及的题型,教师可参考其中的题目作适当修改设计考试题,因此做好实验对考试有极大的帮助;实验提示信息中有编程提示、重要内容提示或者出错信息提示;实验步骤以一个实际题目为例给出具体而实用的指导,以便让初学者不至面对实验题目而束手无策。
第II部分为课程设计案例。课程设计是C++语言程序设计的一个重要环节,与实验相比,课程设计通常是以接近实际项目的训练,可以在学习理论知识的同时进一步提高解决实际问题的能力,强化综合应用能力,扩充知识,开阔视野。课程设计的项目都有一定的难度,初学者面对课程设计项目通常有不知所措的感觉,为此特设计9个课程设计案例,每个案例都包括目的与要求、工具与准备工作、分析、实现步骤、测试与结论以及思考与感悟。读者应认真阅读每个案例,最好多读几遍,这样效果更好,不断思考每个案例的实现方法,同时也应参考实现步骤上机实现每个案例。课程设计案例内容丰富,包括了编程工具的项目(例如实用程序工具包),读者感兴趣的项目(例如纸牌游戏-- "21点”) ,读者感兴趣但感到无从下手的程序(例如无符号大整数计算器),解决实际问题的项目(例如电话号码簿), C++的综合应用的项目(例如公司员工管理,包含了类,抽象类,文件管理等内容),还包括了对语言增加的新的功能以及完善C++编译器来加入实验性结构的程序(例如扩展C++) ,通过学习对培养读者面向对象程序设计应用能力方面大有裨益,为将来从事软件开发打下良好的基础。
第III部分为课程设计项目,课程设计是C++语言程序设计的一个重要环节,通过课程设计的综合训练,可以在学习理论知识的同时进一步提高解决实际问题的能力,强化综合应用能力,扩充知识,开阔视野,本书课程设计部分共有9个项目,这些项目难易程度不同,简单的项目可以一个人单独完成,复杂的项目可由几个人共同完成,大部分项目都容易引起读者的兴趣(例如设计万年历、石头-剪刀-布游戏),有些项目是对课程设计案例项目的进一步完善(例如扩展C++新特征),有的项目与课程设计案例项目设计方法相似(例如销售公司员工管理)。每个项目都给出了目的与要求,以及实现提示,读者可参考课程设计案例与提示实现课程设计。
本书讨论的程序都在Visual C++ 6.0、Visual C++ 2005、Visual C++ 2005 Express、Dev-C++和MinGW Developer Studio开发环境中进行了严格测试,并向教师提供了完整的程序,读者可根据自已的理解,选择熟悉的开发环境,开发出功能更强的程序。
对于C++的编译器的问题,在C++之外的任何编程语言中,编译器都没有受到过如此重视。这是因为C++是一门非常复杂的语言,以至于编译器也难以构造,常用的编译器不能完全符合C++标准,下面介绍一些常用的优秀C++编译器。
(1) Visual C++编译器。由微软开发,现在主要流行于Visual C++ 6.0、Visual C++ 2005以及Visual C++ 2005 Express,特点是集成开发环境用户界面友好,信息提示准确,调试方便,对模板支持最完善;Visual C++ 6.0对硬件环境要求低,现在安装计算机最多,但对标准C++兼容只有83.43%, Visual C++ 2005与Visual C++ 2005 Express在软件提示信息上做了进一步的优化与改进,并且对标准C++兼容达到了98%以上的程度,但对硬件的要求较高;还有Visual C++ 2005 Express是一种轻量级的Visual C++软件,易于使用。对于编程爱好者、学生和初学者来说是很好的编程工具,微软在2006年4月22日正式宣布 Visual Studio 2005 Express版永久免费。
(2) GCC编译器。著名的开源C++编译器。它是类UNIX操作系统(例如Linux)下编写C++程序的首选,有非常好的可移植性,可以在非常广泛的平台上使用,也是编写跨平台、嵌入式程序很好的选择。GCC 3.3与标准C++兼容度大概能够达到96.15%。现有已有一些移植在Windows环境下使用GCC编译器的IDE(集成开发环境),例如Dev-C++与MinGW Developer Studio,其中Dev-C++是能够让GCC在Windows下运行的集成开发环境,提供了与专业IDE相媲美的语法高亮、代码提示,调试等功能;MinGW Developer Studio是跨平台下的GCC集成开发环境。目前支持 Windows、Linux和 FreeBSD;根据作者的实际使用,感觉使用GCC编译器的IDE错误信息提示的智能较低,还有就是对模板支持较差,对语法检查较严格,在Visual C++编译器中编译通过的程序可能在GCC编译器的IDE中还会显示有错误信息。
本书所有程序都同时在Visual C++ 6.0、Visual C++ 2005、Visual C++ 2005 Express、Dev-C++和MinGW Developer Studio中通过测试。读者可根据实际情况选择适当的编译器,建议选择Visual C++ 6.0,在附录B中还详细介绍了Visual C++ 6.0、Visual C++ 2005、Visual C++ 2005 Express、Dev-C++和MinGW Developer Studio的使用方法。
为满足不同层次的教学需求,本教材使用了分层的思想,分层方法如下:没加有星号(*)的部分是基本内容,适合所有读者学习;加有星号(*)的部分适合计算机专业的读者深入学习的选学部分;加有双星号(**)的部分适合于感兴趣的同学研究,尤其适合于那些有志于ACM竞赛的读者加以深入研究。作者为本书提供了全面的教学支持,如果在教学或学习过程中发现与本书有关的任何问题都可以与作者联系:youhongyue@cs.scu.edu.cn,作者将尽力满足各位的要求,并可能将解答公布在作者的教学网站http://cs.scu.edu.cn/~youhongyue上。在教学网站上还将提供如下内容。
① 向教师提供所有实验与课程设计在Visual C++ 6.0、Visual C++ 2005、Visual C++ 2005 Express、Dev-C++和MinGW Developer Studio开发环境中的具体程序实现,今后还会提供当时流行的C++开发环境的具体程序实现,对一般读者将在每学期的期末在主页网上公布解压口令。
② 提供所有课程设计案例在Visual C++ 6.0、Visual C++ 2005、Visual C++ 2005Express、Dev-C++和MinGW Developer Studio开发环境中的具体程序实现,今后还会提供当时流行的C++开发环境的具体程序实现。
③ 高级语言程序设计问答专栏。
④ 提供本书作者开发的软件包。
⑤ 提供全国计算机等级考试二级C++上机考试辅导。
⑥ 提供C++面向对象程序设计相关的其他资料(例如Dev-C++与MinGW Developer Studio软件,流行免费C++编译器的下载网址).
希望各位读者能够抽出宝贵的时间将对本教材的建议或意见,当然也可以发表对国内外的C++面向程序设计课程教学的任何意见寄给作者,你的意见将是我们再版修订教材的重要参考,作者将发自内心地感谢这些读者。
邹昌文、王文昌、周焯华、胡开文、沈洁、周德华、欧阳、文涛、文芝明和文波等人做了大量的工作,包括调试程序,提供参考资料,并参加本书部分章节的编写工作。
本书的出版要感谢清华大学出版社各位编辑及评审专家,他们为本书的出版倾注了大量热情,他们具有前瞻性的眼光才让读者有机会看到本书。
尽管作者有良好而负责任的严格态度,并尽了最大努力,但由于作者水平有限,书中难免有不妥之处,因此,敬请各位读者不吝赐教,以便作者有一个提高的机会,并在再版时尽力采用读者的意见,提高本书的质量。
作者2009年2月
第I部分 实验1
实验1 简单程序开发1
1.1 实验目的1
1.2 实验工具与准备工作1
1.3 实验内容1
1.4 实验提示4
1.5 实验步骤4
1.6 测试与结论5
实验2 类和对象5
2.1 实验目的5
2.2 实验工具与准备工作6
2.3 实验内容6
2.4 实验提示9
2.5 实验步骤10
2.6 测试与结论12
实验3 继承与派生12
3.1 实验目的12
3.2 实验工具与准备工作12
3.3 实验内容12
3.4 实验提示17
3.5 实验步骤18
3.6 测试与结论20
实验4 函数重载与运算符重载21
4.1 实验目的21
4.2 实验工具与准备工作21
4.3 实验内容21
4.4 实验提示24
4.5 实验步骤25
4.6 测试与结论28
实验5 虚函数与多态性29
5.1 实验目的29
5.2 实验工具与准备工作29
5.3 实验内容29
5.4 实验提示33
5.5 实验步骤33
5.6 测试与结论36
实验6 C++流和文件流36
6.1 实验目的36
6.2 实验工具与准备工作36
6.3 实验内容36
6.4 实验提示40
6.5 实验步骤40
6.6 测试与结论43
实验7 模板43
7.1 实验目的43
7.2 实验工具与准备工作43
7.3 实验内容43
7.4 实验提示46
7.5 实验步骤47
7.6 测试与结论49
实验8 类型转换、异常处理和命名空间50
8.1 实验目的50
8.2 实验工具与准备工作50
8.3 实验内容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 实现步骤62
1.5 测试与结论67
1.6 思考与感悟67
案例2 "21点”纸牌游戏68
2.1 目的与要求68
2.2 工具与准备工作68
2.3 分析69
2.4 实现步骤70
2.5 测试与结论76
2.6 思考与感悟77
案例3 皇后问题77
3.1 目的与要求77
3.2 工具与准备工作77
3.3 分析77
3.4 实现步骤80
3.5 测试与结论83
3.6 思考与感悟85
案例4 分数计算器85
4.1 目的与要求85
4.2 工具与准备工作85
4.3 分析85
4.4 实现步骤87
4.5 测试与结论92
4.6 思考与感悟92
案例5 无符号大整数计算器92
5.1 目的与要求92
5.2 工具与准备工作93
5.3 分析93
5.4 实现步骤97
5.5 测试与结论104
5.6 思考与感悟104
案例6 电话号码簿105
6.1 目的与要求105
6.2 工具与准备工作105
6.3 分析105
6.4 实现步骤108
6.5 测试与结论114
6.6 思考与感悟116
案例7 公司员工管理116
7.1 目的与要求116
7.2 工具与准备工作117
7.3 分析117
7.4 实现步骤118
7.5 测试与结论129
7.6 思考与感悟132
案例8 扩展C++132
8.1 目的与要求132
8.2 工具与准备工作134
8.3 分析134
8.4 实现步骤140
8.5 测试与结论152
8.6 思考与感悟154第III部分 课程设计项目155
项目1 石头-剪刀-布游戏155
1.1 目的与要求155
1.2 实现提示155
项目2 骰子游戏156
2.1 目的与要求156
2.2 实现提示156
项目3 武士巡逻问题157
3.1 目的与要求157
3.2 实现提示157
项目4 复数计算器157
4.1 目的与要求157
4.2 实现提示158
项目5 带符号大整数计算器158
5.1 目的与要求158
5.2 实现提示158
项目6 万年历159
6.1 目的与要求159
6.2 实现提示161
项目7 音像店162
7.1 目的与要求162
7.2 实现提示163
项目8 销售公司员工管理163
8.1 目的与要求163
8.2 实现提示163
项目9 扩展C++新特征163
9.1 目的与要求163
9.2 实现提示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