面向对象程序设计——C++语言描述(原书第2版)
作者 : (美)Richard Johnsonbaugh;Martin Kalin 著
译者 : 蔡宇辉 李军义 译 杨贯中 审校
丛书名 : 计算机科学丛书
出版日期 : 2011-05-30
ISBN : 978-7-111-34576-3
定价 : 69.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 464
开本 : 16
原书名 : Object-Oriented Programming in C++
原出版社: Pearson Education Asia
属性分类: 教材
包含CD :
绝版 :
图书简介

本书内容丰富,结构合理,写作风格严谨,深刻地论述了C++语言的面向对象编程的各种技术,主要内容包括:面向对象编程方法、C++语言的各种特性、STL、C++输入/输出流、MFC等。本书针对最新的C++规范作了全面的修订,使读者可以全面掌握C++的最新技术。为使读者学习本书时掌握重点,各章节均配备了大量的练习和编程习题。本书在各章末列举了大量易犯的编程错误及避免这些错误的方法,以帮助读者编写出更为可靠的代码。
本书以作者在大学中讲授的C++课程为基础,特别适合大学计算机专业作为面向对象编程与C++语言课程的教材,同时可供软件开发人员参考。

图书特色

面向对象程序设计
C++语言描述
(原书第2版)
Object-Oriented Programming in C++ Second Edition 
(美)Richard Johnsonbaugh Martin Kalin 著 蔡宇辉 李军义 译 杨贯中 审校

本书深刻论述了C++语言的面向对象程序设计的各种技术。内容包括:面向对象编程方法、C++语言的各种特性、STL C++输入/输出流、MFC等。本书配备了大量的习题,并列举了易犯的错误及避免错误的方法,易于读者的学习。

本书特点
结构合理、高效:内容讲解由浅入深、循序渐进。
内容充实、实用:涵盖C++主要知识点,并附有经典实训案例。
语言严谨、精练:结合实训案例,内容介绍层层展开、环环相扣。

由于版权问题,本书未包括原书光盘和教师参考手册。

图书前言

本书以作者在DePaul大学讲授的C++课程为基础,可用于自学或在面向对象与C++课程中作为教材使用。本书假定读者没有任何C++知识,但已经具备C语言知识。R. Johnsonbaugh和M. Kalin合著的《Applications Programming in ANSI C》(3rd ed., 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.

上架指导

计算机科学及应用

封底文字

本书深刻论述了C++语言的面向对象程序设计的各种技术。内容包括:面向对象编程方法、C++语言的各种特性、STL C++输入/输出流、MFC等。本书配备了大量的习题,并列举了易犯的错误及避免错误的方法,易于读者的学习。

本书特点:

结构合理、有效,内容讲解由浅入深、循序渐进,章节编写方式层层展开、环环相套。
内容充实、实用:涵盖C++主要知识点,各章重要知识点后面都附有典型的实训案例。
语言严谨、精练:结合实训案例,清楚、准确地解释C++中众多且比较抽象的概念。
快速掌握项目开发:项目开发与理论教学紧密结合,每章的项目设计都作为大型软件项目的一部分出现。

译者简介

蔡宇辉 李军义 译 杨贯中 审校:暂无简介

译者序

在信息技术飞速发展的今天,计算机相关专业的学生和从事计算机相关教学的教师面临着越来越多的挑战,新技术和新名词层出不穷,种类繁多的可视化开发工具也不断涌现。许多学生在面对这些新奇的开发工具时往往忽略了基本语言的学习,其中为数不少的人误以为熟练掌握一种或几种可视化开发工具就能成为专业的软件开发人员。实际上,任何一种可视化开发工具都只是集成了若干工具的商业化产品而已,衡量一位软件开发人员水准的依据并非只是看他对开发工具的掌握程度,而是要看他是否熟练地掌握了某一门(或几门)程序开发语言,看他是否具备坚实的操作系统知识,看他是否能熟练地设计数据结构和算法等。
  C++语言发展至今,已经成为许多开发人员的首选语言,国内各大高校也纷纷将C++语言设置为计算机专业必修课程。同时数据结构课程也越来越多地以C++为描述语言,特别是C++标准委员会在1994年发布了C++标准库之后,C++的应用前景和范围也就更为广阔了。
  本书的主要作者Richard Johnsonbaugh是DePaul大学的教授,从事C语言和C++语言教学工作多年,具有丰富的教学经验,并组织编写过多本极受欢迎的教材。本书以他在DePaul大学讲授的C++语言为基础,并根据最新的C++标准对第1版进行了全面更新。
  本书可分为两大部分。第一部分包括前面六章,主要阐述面向对象基本原理和C++语言本身的各种知识,涉及面向对象基本原理、类、继承、多态和操作符重载等。第二部分包括第7章到第9章,主要介绍C++标准库和微软基本类库(Microsoft Foundation Classes, MFC),涉及模板、标准模板库(Standard Template Library, STL)、标准输入输出库、MFC、COM等。第一部分是C++语言基本知识,第二部分是C++语言的扩展,第二部分中的STL还可作为数据结构教学的辅助材料。
  C++语言的语法相当繁杂,即便是生硬地记住了这些语法而不实际运用,还是无法掌握其精髓。为此,本书作者并没有罗列语法,而是将大量实例贯穿始终,让读者在学习这些例子的同时,自然而然地理解并掌握各种C++语法,并能熟练运用,这也正是本书最大的特点之一。同时,本书在大多数章节中都给出了完整的应用程序示例,并进行了详尽的分析,告诉读者应该怎样设计,为什么要这样设计。通过这些程序,读者可以学到如何运用C++语言的各种技术进行分析、设计与编码,最终构造出精巧的应用程序。
  本书翻译工作主要由蔡宇辉完成,李军义对译稿进行了修润,并测试运行了本书大部分源程序,杨贯中教授对全书进行了审校。另外,在本书翻译过程中,得到了英宇、陈治平、周昕、柳杨、廖正军、罗呈等老师和许多研究生的大力协助,在此表示衷心的感谢。
  由于译者水平有限且时间仓促,书中难免存在错误,恳请读者批评指正。

蔡宇辉  李军义
2001年1月于湖南大学

图书目录

出版者的话
译者序
前言
第1章  面向对象编程 1
1.1  面向过程的编程风格与面向对象的编程风格 1
1.1.1  面向过程的编程风格 1
1.1.2  面向对象的编程风格 2
1.1.3  关系 3
1.1.4  课后练习 3
1.2  类与抽象数据类型 3
1.2.1  信息隐藏 3
1.2.2  封装 4
1.2.3  抽象数据类型 4
1.2.4  课后练习 5
1.3  客户/服务器模式与消息传递 5
1.3.1  客户/服务器模式 6
1.3.2  消息传递与方法调用 6
1.3.3  课后练习 8
1.4  继承与多态 8
1.4.1  继承 8
1.4.2  多态 9
1.4.3  多态与递归 9
1.4.4  课后练习 11
1.5  接口与组件 11
1.5.1  接口 11
1.5.2  组件 12
1.5.3  课后练习 13
第2章  从C到C++ 14
2.1  名字空间 14
2.1.1  课后练习 17
2.2  C++输入/输出简介 18
2.2.1  操纵符 20
2.2.2  混合使用C和C++的输入/输出 23
2.2.3  课后练习 24
2.3  文件 24
2.3.1  测试文件的打开状态 26
2.3.2  课后练习 26
2.4  若干重要的C++特性 26
2.4.1  强制类型转换 26
2.4.2  常数 28
2.4.3  数据类型bool 28
2.4.4  枚举类型 28
2.4.5  定义变量 29
2.4.6  结构 30
2.4.7  课后练习 31
2.5  string类型 31
2.5.1  定义string类型的变量 31
2.5.2  转换为C风格的字符串 31
2.5.3  字符串长度 32
2.5.4  读写string 32
2.5.5  赋值 33
2.5.6  字符串的连接 34
2.5.7  修改字符串 34
2.5.8  提取子串 36
2.5.9  查找 36
2.5.10  字符串比较 37
2.5.11  课后练习 38
2.6  函数 40
2.6.1  函数原型 40
2.6.2  main函数 44
2.6.3  引用 44
2.6.4  引用调用 42
2.6.5  引用返回 43
2.6.6  内联函数 44
2.6.7  函数默认参数 45
2.6.8  函数重载 46
2.6.9  函数签名 47
2.6.10  课后练习 48
2.7  new和delete操作符 51
2.7.1  课后练习 53
2.8  例外处理 53
2.8.1  课后练习 56
2.9  补充材料 57
2.9.1  C++关键字 57
2.9.2  无名名字空间 57
2.9.3  无名联合 57
2.9.4  成员选择符 58
2.10  常见编程错误 61
2.11  编程习题 69
第3章  类 72
3.1  类和对象 72
3.1.1  类声明 72
3.1.2  C++的信息隐藏机制 73
3.1.3  成员选择符 74
3.1.4  类范围 75
3.1.5  关键字class和struct的区别 75
3.1.6  类成员函数的定义 76
3.1.7  在程序中使用类 78
3.1.8  课后练习 78
3.2  示例程序:堆栈类 79
3.2.1  问题 79
3.2.2  示例程序的输出 79
3.2.3  解决方案 80
3.2.4  类的实现 81
3.2.5  代码分析 82
3.2.6  程序设计建议 82
3.2.7  课后练习 82
3.3  效率和健壮性 82
3.3.1  通过引用来传递和返回对象 82
3.3.2  const类型参数的对象引用 83
3.3.3  const成员函数 84
3.3.4  对成员函数进行重载以便处理两种类型的字符串 85
3.3.5  课后练习 85
3.4  示例程序:时间标记类 86
3.4.1  问题 86
3.4.2  示例程序的输出 86
3.4.3  解决方案 88
3.4.4  类的实现 88
3.4.5  代码分析 89
3.4.6  程序设计建议 91
3.4.7  课后练习 91
3.5  构造函数与析构函数 91
3.5.1  构造函数 92
3.5.2  对象数组与默认构造函数 93
3.5.3  通过构造函数约束对象的创建 94
3.5.4  拷贝构造函数 95
3.5.5  定义拷贝构造函数 96
3.5.6  禁止通过传值方式传递和返回类对象 100
3.5.7  转型构造函数 101
3.5.8  转型构造函数与隐式类型转换 101
3.5.9  构造函数初始化程序 102
3.5.10  构造函数与操作符new和new[] 103
3.5.11  析构函数 104
3.5.12  课后练习 105
3.6  示例程序:Task类 108
3.6.1  问题 108
3.6.2  示例程序的输出 108
3.6.3  解决方案 109
3.6.4  类的实现 109
3.6.5  代码分析 111
3.6.6  课后练习 113
3.7  类数据成员和类成员函数 113
3.7.1  类数据成员 113
3.7.2  类成员函数 115
3.7.3  在成员函数内定义static变量 116
3.7.4  课后练习 117
3.8  指向对象的指针 117
3.8.1  常量指针this 119
3.8.2  课后练习 120
3.9  常见编程错误 121
3.10  编程习题 126
第4章  继承 131
4.1  引言 131
4.1.1  课后练习 132
4.2  基本概念和语法 132
4.2.1  继承机制下的私有成员 133
4.2.2  改变访问限制 134
4.2.3  名字隐藏 135
4.2.4  间接继承 136
4.2.5  课后练习 137
4.3  示例程序:影片跟踪管理 137
4.3.1  问题 137
4.3.2  示例程序的输出 138
4.3.3  解决方案 138
4.3.4  类的实现 139
4.3.5  代码分析 140
4.3.6  程序设计建议 141
4.4  保护成员 141
4.4.1  课后练习 144
4.5  继承机制下的构造函数与析构函数 145
4.5.1  继承机制下的构造函数 145
4.5.2  派生类构造函数的规则 147
4.5.3  继承机制下的析构函数 150
4.5.4  课后练习 152
4.6  示例程序:设计序列的类层次结构 153
4.6.1  问题 153
4.6.2  示例程序的输入与输出 154
4.6.3  解决方案 157
4.6.4  类的实现 157
4.6.5  代码分析 159
4.7  多继承 161
4.7.1  继承和访问规则 162
4.7.2  虚基类 163
4.7.3  课后练习 164
4.8  补充材料 166
4.8.1  保护继承 166
4.8.2  私有继承 166
4.9  常见编程错误 167
4.10  编程习题 169
第5章  多态 172
5.1  C++中的运行期绑定与编译期绑定 172
5.1.1  C++多态的前提条件 173
5.1.2  虚成员函数继承 176
5.1.3  运行期绑定和虚成员函数表 177
5.1.4  构造函数与析构函数 177
5.1.5  虚析构函数 178
5.1.6  对象成员函数和类成员函数 180
5.1.7  课后练习 180
5.2  示例程序:改进的影片跟踪管理 182
5.2.1  问题 182
5.2.2  示例程序的输入/输出 182
5.2.3  解决方案 184
5.2.4  类的实现 184
5.2.5  代码分析 187
5.2.6  程序设计建议 189
5.2.7  课后练习 189
5.3  重载、覆盖和遮蔽 189
5.3.1  重载 189
5.3.2  覆盖 190
5.3.3  遮蔽 192
5.3.4  名字共享 193
5.3.5  课后练习 194
5.4  抽象基类 196
5.4.1  抽象基类和纯虚成员函数 196
5.4.2  定义纯虚成员函数的限制 198
5.4.3  抽象基类的使用 198
5.4.4  微软的IUnknown接口 199
5.4.5  课后练习 199
5.5  运行期类型识别 200
5.5.1  dynamic_cast操作符 200
5.5.2  dynamic_cast的规则 205
5.5.3  dynamic_cast与static_cast
小结 205
5.5.4  typeid操作符 205
5.5.5  扩展RTTI 206
5.5.6  课后练习 206
5.6  补充材料 208
5.6.1  强多态和弱多态 208
5.7  常见编程错误 208
5.8  编程习题 211
第6章  操作符重载 215
6.1  基本操作符重载 215
6.1.1  操作符的优先级和语法 217
6.1.2  课后练习 218
6.2  示例程序:复数类 219
6.2.1  问题 219
6.2.2  示例程序的输出 219
6.2.3  解决方案 219
6.2.4  类的实现 219
6.2.5  代码分析 221
6.2.6  课后练习 222
6.3  用顶层函数进行操作符重载 223
6.3.1  课后练习 226
6.4  friend函数 227
6.4.1  课后练习 228
6.5  输入与输出操作符的重载 229
6.5.1  课后练习 230
6.6  赋值操作符的重载 231
6.6.1  课后练习 233
6.7  特殊操作符的重载 234
6.7.1  下标操作符的重载 234
6.7.2  函数调用操作符的重载 237
6.7.3  自增与自减操作符的重载 239
6.7.4  转型操作符 241
6.7.5  课后练习 243
6.8  示例程序:关联式数组 244
6.8.1  问题 244
6.8.2  示例程序的输入与输出 244
6.8.3  解决方案 245
6.8.4  类的实现 246
6.8.5  代码分析 247
6.8.6  课后练习 248
6.9  内存管理操作符 248
6.9.1  课后练习 251
6.10  补充材料 252
6.10.1  friend类 252
6.11  常见编程错误 252
6.12  编程习题 255
第7章  模板与标准模板库 257
7.1  模板的基本知识 257
7.1.1  模板实例 260
7.1.2  参数表中的模板类 261
7.1.3  模板的函数式参数 262
7.1.4  课后练习 264
7.2  示例程序:模板堆栈类 265
7.2.1  问题 265
7.2.2  示例程序的输出 265
7.2.3  解决方案 265
7.2.4  类的实现 266
7.2.5  代码分析 268
7.2.6  程序设计建议 269
7.2.7  断言 270
7.2.8  课后练习 271
7.3  标准模板库STL 271
7.3.1  容器、算法和迭代器 271
7.3.2  STL的优越性 271
7.3.3  容器基础知识 273
7.3.4  基本序列式容器:vector、deque和list 273
7.3.5  vector、deque和list的效率比较 276
7.3.6  基本的关联式容器:set、mult-
iset、map和multimap 276
7.3.7  容器适配器 278
7.3.8  其他容器 281
7.3.9  STL算法 284
7.3.10  其他STL构件 288
7.3.11  课后练习 289
7.4  示例程序:证券业绩报表 290
7.4.1  问题 290
7.4.2  示例程序的输入与输出 290
7.4.3  解决方案 293
7.4.4  类的实现 293
7.4.5  代码分析 296
7.5  附加材料 298
7.5.1  模板类与继承 298
7.6  常见编程错误 299
7.7  编程习题 300
第8章  C++输入输出类层次 304
8.1  概况 304
8.1.1  输入输出库中的流类层次 304
8.1.2  输入输出库中的缓冲类层次 305
8.1.3  缓冲类层次与流类层次的关系 306
8.1.4  模板的使用 307
8.1.5  课后练习 307
8.2  ios_base和basic_ios类 308
8.2.1  ios_base 308
8.2.2  basic_ios 312
8.2.3  例外处理 313
8.2.4  课后练习 314
8.3  高层输入输出类 315
8.3.1  basic_istream 315
8.3.2  basic_ostream 319
8.3.3  basic_iostream 321
8.3.4  课后练习 321
8.4  操纵器 322
8.4.1  设计不带参数的操纵器 322
8.4.2  设计带参数的操纵器 324
8.4.3  课后练习 325
8.5  文件输入输出类 325
8.5.1  basic_ofstream 325
8.5.2  basic_ifstream 327
8.5.3  basic_fstream 328
8.5.4  课后练习 329
8.6  示例程序:随机存取文件类 329
8.6.1  问题 329
8.6.2  示例程序的输入与输出 329
8.6.3  解决方案 330
8.6.4  类的实现 332
8.6.5  代码分析 339
8.7  字符流输入/输出类 344
8.7.1  basic_ostringstream 344
8.7.2  basic_istringstream 345
8.7.3  basic_stringstream 346
8.7.4  课后练习 347
8.8  示例程序:高层拷贝函数 347
8.8.1  问题 347
8.8.2  解决方案 347
8.8.3  类的实现 347
8.8.4  代码分析 348
8.8.5  课后练习 349
8.9  缓冲区类 349
8.9.1  basic_streambuf 349
8.9.2  basic_filebuf 350
8.9.3  basic_stringbuf 355
8.9.4  课后练习 356
8.10  补充材料 356
8.11  常见编程错误 357
8.12  编程习题 358
第9章  MFC中的面向对象编程 360
9.1  用MFC进行Windows程序设计 360
9.1.1  MFC编程的代码生成器 361
9.1.2  课后练习 362
9.2  MFC中的文档/视图结构 362
9.2.1  文档序列化 365
9.2.2  课后练习 366
9.3  示例程序:文档序列化 366
9.3.1  问题 366
9.3.2  示例程序的输出 366
9.3.3  解决方案 367
9.3.4  类的实现 367
9.3.5  代码分析 375
9.3.6  课后练习 378
9.4  COM 378
9.4.1  可更改的服务器和不可变更的接口 379
9.4.2  COM接口的层次 380
9.4.3  IDispatch接口 380
9.4.4  COM程序的类型 381
9.4.5  VC++对COM的支持 381
9.4.6  COM和OLE 382
9.4.7  课后练习 382
9.5  示例程序:自动化服务器与控制器 383
9.5.1  问题 383
9.5.2  示例程序的输出 383
9.5.3  解决方案 383
9.5.4  类的实现 384
9.5.5  代码分析 391
9.5.6  引用计数问题 393
9.5.7  课后练习 393
9.6  补充材料 394
9.7  编程习题 394
附录A  ASCII表 396
附录B  用到的C++函数和成员函数 399
附录C  奇数编号练习的提示及答案 428

教学资源推荐
作者: 刘艺 等
作者: [美] 凯·霍斯特曼(Cay Horstmann) 兰斯·尼塞斯(Rance Necaise) 著
作者: 严义 包健 周尉 编著
参考读物推荐
作者: 王院峰; 陈静
作者: 王慧 王浩 等编著
作者: 陈春宝 徐筱刚 田建中 著