本书以作者在DePaul大学讲授的C++课程为基础,可用于自学或在面向对象与C++课程中作为教材使用。本书假定读者没有任何C++知识,但已经具备C语言知识。R. Johnsonbaugh和M. Kalin合著的《Applications Programming in ANSI C》(3rded., Upper Saddle River, N.J.: Prentice Hall, 1996)可为您提供阅读本书所需的C语言知识。本书包含如下辅助材料:
一张光盘,其中含有Microsoft Visual C++编译器。
一本教师参考手册。
一个www站点。
上述辅助材料与本书一起,提供了一整套帮助读者掌握C++的支持系统。
与我们其他的C和C++书籍一样,我们在本书中提供大量的例子、图表、程序清单、自学练习、编程习题和示例程序,并列举了大量易犯的编程错误。我们力求本书叙述清晰并用例子说明各种各样的良好编程习惯。
本书论述面向对象原理(见第1章),强调编程实践,引导读者使用模板和标准模板库(Standard Template Library, STL,见第7章),深入讲解C++输入/输出类层次(见第8章),详细讲解大量有用的例子(如堆栈类,见3.2节和7.2节;随机存取文件类,见8.6节),介绍了用微软基本类库(Microsoft Foundation Classes, MFC)进行面向对象编程的方法(见第9章)。
本书讲述的C++依照最新的C++标准,包括很多最新的C++技术:
逻辑类型bool。
string类。
新型头文件。
名字空间和名字空间std。
新的类型转换机制。
标准模板库。
?例外处理。
?运行期类型识别(RTTI)。
new[]操作符。
模板输入/输出类。
stringstream类。
概述
. 从20世纪80年代到90年代初期,C语言是许多应用程序和系统程序的首选语言。个人电脑上的很多重要软件都是用C语言编写的,如电子制表软件、字处理软件、数据库系统、通信包、统计软件、图形包等。事实上,UNIX环境中几乎所有的软件基本上是用C语言编写的,而且许多希望能够移植的大型机系统中的软件也是用C语言编写的。在20世纪80年代初期,AT&T贝尔实验室的Bjarne Stroustrup开发了C++语言,作为C语言的面向对象扩展,以用于设计大型复杂系统。现在,C++语言已经用于各种平台,从廉价的个人电脑到昂贵的大型机系统。C++将C语言作为其子集,弥补了C语言的一些不足之处,并且支持抽象数据类型,通过模板技术还可实现类属函数。
C++语言是相当复杂的。幸运的是,大部分程序设计者不需掌握C++的所有技术细节便可从C++的强大功能中受益。我们将讲述的重点放在C++语言最有用的部分,而将其他较深奥和较特殊的部分放在补充材料部分。我们着重引导读者使用有效的设计技术来编写实际的C++程序,而不是卖弄技巧。
关于本书
本书主要包括以下内容:
大量的实例和练习。
与现实世界密切相关的应用程序。
大量编程习题,本书有100多个编程习题。
在每章的结尾列举出常见的编程错误。
涵盖STL的内容(见第7章)。
讨论了标准C++输入/输出类库(见第8章)。
涵盖MFC面向对象编程的内容(见第9章)。
通过小节后面的练习,读者可以检查自己对该节的掌握程度。本书包含500多个练习题,书后提供奇数编号练习的答案,偶数编号练习的答案在教师参考手册中。
提供大量图表和程序清单。
提供最新的C++技术。
主要数据结构用C++实现,如堆栈(见3.2节和7.2节)、文件(见8.6节)。
易于理解的代码,我们力求书中的代码清晰可读。
提供一套Microsoft Visual C++学生版软件。
对第1版所作的改动
?C++近来的改动和新增内容均在第2版得到了反映。
名字空间的概念提前到了2.1节,因为新型头文件需要用到名字空间std。
例外处理的概念提前到了2.8节。
?多态成为单独的一章(第5章)。
继承提前到第4章,多态提前到第5章,以体现它们在面向对象编程范例中的重要性,而将操作符重载推后到第6章。
运行期类型识别(RTTI)放到5.5节。
模板和STL成为单独的一章(第7章)。
对第8章(第1版中为第7章)的输入/输出类层次作了重大改进,以反映这个类层次的重要修改。
增加第9章,讲述MFC中的面向对象编程。
部分深奥的内容放到补充材料部分。
实例数目增加到近300个。
练习的数目增加到500多个。
对示例程序进行了广泛的修改。
图表加边线,与文字分开。
为本书建立了WWW网站,提供本书的最新资料。
在光盘中增加了Microsoft Visual C++学生版软件。
本书的组织结构
第1章概述面向对象程序设计的若干重要概念,如类、抽象数据类型、对象、封装、客户/服务器模式、消息传递、继承、多态等。本章比较了面向对象方法与自顶向下的功能分解法之间的差别,并举例说明了这种差别。
第2章阐述名字空间、string类型、new和delete操作符、例外处理及基本C++输入/输出流。同时,还讲述了C++的改进和新增内容。学完本章后,读者就可以正确使用C++的特性了。
第3章覆盖设计类所需的基本知识,具备这些知识后,读者就可以进行类的设计了。本章讲述了类的声明、构造函数和析构函数等成员函数、静态数据成员和静态成员函数、对象指针等。第3章列举了大量实例以说明如何设计类来实现抽象数据类型,从而满足面向对象的封装要求。
第4章讲解继承(包括多继承),并通过大量的实例和示例程序(如sequence类层次)讲解基本的编程技术。
第5章讲解多态。5.1节详细讲解运行期绑定与编译期绑定的区别,5.4节与5.5节分别讲述抽象基类与运行期类型识别技术。
第6章讲解操作符重载。本章说明如何对普通操作符(如+、/等)进行重载,以及下标操作符、函数调用操作符、内存管理操作符、前置自增操作符和后置自增操作符等特殊操作符的重载。通过实例和示例程序,展示了操作符重载的强大功能。
第7章讲述模板和STL。7.2节通过堆栈模板类展示模板的使用方法,7.4节通过示例程序说明如何使用STL。
第8章讲解C++输入/输出类层次。首先,通过对C++输入/输出库进行详细讨论,使有兴趣的读者可以利用其中包含的具有强大功能的类。其次,将C++输入/输出类库作为主要的成熟的面向对象设计的实例讲解应该如何设计C++类层次。最后,将C++输入/输出类层次作为模板应用的极佳范例讲解模板的使用方法。第8章对操纵器给予特别的关注,它们是C++中实现复杂输入/输出强有力的方法。读者通过这一章的学习,可以彻底检验对C++输入/输出的掌握程度。
第9章讲解使用MFC进行面向对象程序设计的方法。本章阐述了用MFC和用Win32 API(Application Programmer Interface)进行Windows程序设计的区别,Win32 API是Microsoft访问系统服务的C库。本章还介绍了事件驱动程序设计的基本概念和结构。本章还讲述利用序列化技术处理对象持久性的方法。另外,本章简述了微软的组件对象模型(Component Object Model,COM)技术。我们在两个示例程序中概述了MFC和Visual C++。
本书有两个附录。附录A为ASCII表。附录B为部分最常用的C++函数和类成员函数,说明了这些函数的参数表和返回值,需要什么头文件,以及函数的功能简介。
本书在讲述C++的语法和语义特点时大量依赖于书中的实例、图表、程序清单。由于任何单一的方法都不可能透彻地教授好一门语言课程,所以根据多年讲述C++及其他语言类课程的经验,我们坚信通过上述不同方式的结合将达到较好的教学效果。
大多数学生同我们一样,认为学习和使用C++是令人兴奋的,本书通过生动的实例、示例程序、编程习题和代码片断,力求使读者能够体验这种感受。
本书的章节结构
本书章节的组织如下:
本章目录
本章概述
节
课后练习
节
课后练习
补充材料
常见编程错误
?编程习题
除了第1章与第2章,本书其他各章都包含了一个或多个示例程序,每个示例程序都用一节的篇幅来阐述,该节又分为问题、示例程序的输入与输出、解决方案、类的实现或代码实现、代码分析等小节。多数小节都作了进一步讨论。
本书包含如下示例程序:
堆栈类及模板堆栈类(3.2节,7.2节)
影片跟踪管理(4.3节,5.2节)
序列的类层次(4.6节)
复数节(6.2节)
?关联式数组(6.8节)
证券业绩报表(7.4节)
?随机存取文件类(8.6节)
自动化服务器与控制器(9.5节)
补充材料部分主要讨论C++语言中不太常用的一些机制,或者对该语言的某部分提供一些额外的技术细节。
常见编程错误列举了在使用C++语言时易犯的一些错误。
本书包含了100多个编程习题,这些习题来源于各种实际的应用程序。
本书实例
本书包含大约300个实例,每个实例都为读者阐述了C++语言的某个知识点。每个实例的结束符号为■。
本书练习
本书包含500多个练习、代码片断以及少数完整的程序,答案形式一般为简短的回答。这些练习可用于家庭作业或自测验。本书最后给出了奇数编号练习的答案,偶数编号练习的答案在光盘的教师参考手册中。我们的教学经历证明课后练习是非常重要的。
每章后面都附有编程习题,有些习题是较完整的应用程序,以下列出了其中的一部分:
?模拟(编程习题2-9)。
队列(编程习题3-8与7-4)。
进程同步(编程习题3-10)。
数据库(编程习题3-15)。
局域网(编程习题3-17与6-7)。
数组分层(编程习题4-4)。
日期服务(编程习题5-10)。
?迭代器(编程习题7-6、7-7与7-8)。
课程安排(编程习题7-14)。
索引文件类(编程习题8-5)。
基于对话框的并带有图形用户界面的系统管理应用程序(编程习题9-9)。
并非所有读者都会对这些应用程序感兴趣,本书中包含这些应用程序是为了阐述用C++进行程序设计时通常会遇到的一些问题。
光盘内容
本书所附光盘提供了一套Microsoft Visual C++集成开发环境,该集成开发环境包含一个C++编译器、一个调试器、一个类浏览器、帮助工具、MFC、ActiveX模板库及其他应用程序开发所需的资源。本书中的所有示例程序,包括第9章所示的基于Windows的应用程序,均可使用Visual C++进行编译。
教师参考手册
出版社免费提供一本教师参考手册,其中包含偶数编号练习的答案、教学大纲示范和教学用幻灯片。
WWW站点
我们在www站点http://condor.depaul.edu/~mkalin提供了本书所包含的源代码、头文件、本书中示例程序所用到的数据文件、某些较大例子的源代码、教学大纲示范、教学用幻灯片、使用Microsoft Visual C++的说明信息、有关MFC的附加技术细节、错误修正表等。
致谢
我们在此衷心感谢以下各位评论家:西雅图大学的Adair Dingle、独立顾问Rex Jaeschke、DePaul大学的Glenn Lancaster、南康涅狄格州立大学的Winnie Y.Yu。
我们衷心感谢Patricia Johnsonbaugh,她为本书的校订工作作出了极大的贡献。
DePaul大学计算机与通信信息系统学院及院长Helmut Epp为本书的撰写提供了大量帮助,在此表示由衷的感激。
在本书编写过程中,Prentice Hall出版公司一直为我们提供各种支持,特别要感谢Alan R.Apt、Petra Recter和Scott Disanno,在他们的帮助下,本书才得以顺利出版。
R. J.
M. K.