前言 作者使用过数本C++面向对象程序设计的教材,发现不少问题。C++教学的普遍结果是,学生学完了C++,却不会使用目前流行的C++开发工具编写程序。此外,不少教材也存在错误,例如某C++语言经典教材在关于打开文件的代码中出现了类似如下的代码:ofstream outFile; //定义文件变量 if (outFile.open("test.txt",ios::app)) //以追加方式打开文件 {//打开文件失败 cout<<"打开文件失败!"< //编译预处理命令 using namespace std; //使用命名空间std //声明复数数 class Complex { private: //数据成员 double real; //实部 double image; //虚部 public: //公有函数 Complex(double r=0,double i=0): real(r),image(i){} //构造函数 friend Complex operator+(const Complex &z1, const Complex &z2) //复数加法 { return Complex(z1.real+z2.real,z1.image+z2.image); } … };上面的类声明及相关代码在Visual C++2022和DevC++5.11中都能正常通过运行,但在Visual C++6.0中会出现编译时错误,是Visual C++6.0的一个缺陷(Bug),在Visual C++6.0中将#include //编译预处理命令 using namespace std; //使用命名空间std 改为#include //编译预处理命令后才可正常运行。又如,对于输入运算符“>>”和输出运算符“<<”重载为类的友元函数时,采用标准头文件iostream,在Visual C++6.0、Visual C++2022和DevC++5.11中都不能通过编译,只能在Visual C++6.0中采用传统的头文件iostream.h才能通过编译,但将输入运算符“>>”和输出运算符“<<”重载为普通函数时无任何编译问题。 可惜的是,鲜有教材对具体的编程环境进行详细指导,无形中增加了学生掌握C++的难度。 作者在经过二十多年教学和查阅大量参考资料后编写本书,将全书分为8章。第1章阐述C++的主要特点及C++程序开发过程,详细介绍C++在非面向对象方面的常用新特性。第2章介绍面向对象程序设计技术、C++类的定义、对象的创建以及对象成员的访问、友元与静态成员等基本内容。第3章介绍模板编程方法,并对模板容易出现的编程问题进行详细的讨论。第4章介绍运算符重载,重点对不同C++编译器使用运算符重载时的兼容性问题进行了具体指导。第5章着重介绍C++的继承机制及虚基类。第6章介绍多态性,重点介绍虚函数和抽象类。第7章介绍输入输出流,重点讨论标准输入输出流类、文件操作与文件流类。第8章对C++中的其他主题进行深入阐述,这些主题都是难点,但都不是重点。如果这些内容在前面的章节中加以讨论,对于读者就会因难度过大而较难进入面向对象的思维模式,当读者已具备面向对象的思维习惯以后,再来介绍这些典型问题应该比较合适。 对于初学者,考试时往往会感到茫然而不知所措,因此本书习题包括了选择题、填空题和编译题。这些题目选自于考试题,可供学生期末复习,也可供教师编写试题时参考。 本书在部分章节中还提供了实例研究,主要提供给那些精力充沛的学生深入学习与研究,这些实例包括对正文内容的应用(例如6.4节中栈的实现实际上就是抽象类的一个典型应用)、读者深入学习时可能会遇到的算法(例如3.4节中的快速排序)以及应用所学知识解决实际问题(例如7.5节中的简单工资管理系统就是文件操作实现简单信息管理系统),读者通过对实例研究的学习,可提高实际应用C++面向对象程序设计的能力,虽然有一定的难度,但应比读者的想象更易学习与掌握。 为了尽快提高读者的实际编程能力,本书各章提供了程序陷阱,包括在实际编程时容易出现的问题,也包括正文内容的深入讨论,还包括对C++编译环境中存在的兼容性问题进行实用而具体的指导,这部分内容不管对初学者还是长期编程的人都很有用。 关于C++编译器的问题,在C++之外的任何编程语言中,编译器都没有受到过如此的重视。这是因为C++是一门非常复杂的语言,以至于编译器也难以构造,我们常用的编译器都不能完全符合C++标准,如下介绍一些常用且优秀的C++编译器。 (1) Visual C++编译器。该编译器由微软公司开发,现在流行的是Visual C++6.0、Visual C++2022以及更新版本的Visual C++,特点是集成开发环境用户界面友好,信息提示准确,调试方便,对模板支持最完善。Visual C++6.0对硬件环境要求低,现在安装的计算机最多,但对标准C++兼容只有83.43%。Visual C++2022与更新版本的Visual C++在软件提示信息上做了优化与改进,使其对标准C++的兼容达到了98%以上,但对硬件的要求较高。 (2) GCC编译器。这是一款著名的开源C++编译器,类UNIX操作系统(例如Linux)下编写C++程序的首选,有非常好的可移植性,可以在非常广泛的平台上使用,也是编写跨平台、嵌入式程序很好的选择。GCC 3.3与标准C++的兼容性可达96.15%。现已有一些移植在Windows环境下使用GCC编译器的IDE(集成开发环境),例如DevC++是能够让GCC在Windows下运行的集成开发环境,提供了与专业IDE相媲美的语法高亮、代码提示和调试等功能;根据作者的实际使用,感觉使用GCC编译器的IDE错误信息提示的智能较低,错误提示不太准确,对模板支持较差,但对语法检查较严格,在Visual C++编译器中编译通过的程序可能在GCC编译器的IDE还会显示有错误信息。 本书所有程序都同时在Visual C++6.0、Visual C++2022和DevC++5.11中通过测试。读者可根据实际情况选择适当的编译器。 教师可采取多种方式使用本书讲授C++面向对象程序设计,并可根据读者的背景知识以及课程的学时数进行内容的取舍。为满足不同层次的教学需求,本教材使用了分层的思想,分层方法如下: 没有加“*”及“”的部分是基本内容,适合所有读者学习;加有“*”的部分适合计算机专业的读者作为深入学习的选学部分;加有“”的部分适合于感兴趣的读者研究。 作者为本书提供了全面的教学支持,除了向专业教师提供教学资源外,普通读者可在清华大学出版社官方网站上下载如下教学参考内容: (1) 提供书中所有例题在Visual C++6.0、Visual C++2022和DevC++5.11开发环境中的测试程序。 (2) 提供教学用PowerPoint课件。 (3) 提供教材中所有习题的参考答案。 (4) 提供至少6套C++语言程序设计模拟试题及其解答,以供学生期末复习,也可供教师出考题时参考。 (5) 提供C程序设计相关的其他资料(例如DevC++软件,流行、免费的C/C++编译器下载网址)。 (6) 线上实训项目与线上习题使用指导。 通过扫描二维码可观看全书所有例题的程序演示视频,其中第一个二维码对应于Visual C++6.0开发环境的程序演示视频,第二个二维码对应于Visual C++2022开发环境的程序演示视频,第三个二维码对应于DevC++5.11开发环境的程序演示视频。 在附录A中介绍Visual C++6.0、Visual C++2022和DevC++5.11开发环境建立工程的步骤,可通过扫描二维码观看具体操作视频。 提供大量的线上实训项目与线上习题。其中,线上实训项目可用于实验项目或课程设计项目,线上习题可用于布置课后习题,所有线上实训项目与线上习题都采用通关方式完成任务,具体包括任务描述和相关知识,编程实践项目还包括编程要求及测试说明,线上习题包括了单项选题关卡、填空题关卡、判断题关卡及编程实践题关卡,不但可用于学生练习,也可供教师出考试题时参考。线上实训项目与线上习题都由线上平台自动测评与打分,学生所得分值可用于过程化考核成绩。 本书第1章和第2章由罗佳编写,第4章、第7章由刘群编写, 第5章和第6章由丁晓峰编写,第3章和第8章及附录由游洪跃编写,全书由游洪跃统稿。作者还要感谢为本书提供直接或间接帮助的每一个朋友,由于你们热情的帮助或鼓励激发了作者写好本书的信心以及写作热情。 本书的出版要感谢清华大学出版社相关编校人员,由于他们为本书的出版倾注了大量热情,也由于他们具有前瞻性的眼光才让读者有机会看到本书。 尽管作者有良好而负责任的严格态度,并尽了最大努力,但限于作者水平,书中难免有不妥之处,因此敬请各位读者不吝赐教,以便作者有一个提高的机会,并在再版时尽力采用你们的意见,尽快提高本书的质量。 作者2024年9月