本书是一本可供读者自学C++语言的指导用书。C++自1980年问世以来,已发展成在世界范围有广泛影响的面向对象的语言。全书有五个部分,共40章。第1部分介绍C++语言的基本元素。第2部分讲解C++类机制,这是大多数标准C++库的实现都用到的一种语言特性,也是支持用户进行面向对象程序开发的机制。第三部分详细介绍标准C++库的组成部分,包括从C语言继承的标准C库函数和标准的C++字符串类、复数类、I/O流类等。第四部分介绍实现通用容器、算法和迭代器的标准模板库,读者将学习如何进行通用编程。第五部分讨论标准C++支持的高级特性,包括异常处理、名字空间、类型强制转换、运行时类型信息、区域表示等。本书所带光盘提供了Quincy 2002集成开发环境和本书程序示例的所有源代码,读者可通过装入并运行示例加深对本书内容的理解。本书自成体系、叙述简洁、深入浅出,是学习完整的C++语言的优秀读物。本书适合希望使用C++进行编程的程序员,也可供面向对象程序设计的研究、开发人员参考。
第1部分 C++语言
第1章 C++程序设计概述
1.1 C++简史
1.2 C++介绍
1.3 小结
第2章 编写简单C++程序
2.1 第一个程序
2.2 标识符
2.3 关键字
2.4 标准输出流
2.5 变量
2.6 常量
2.7 表达式
2.8 赋值
2.9 以逗号分隔的声明
2.10 表达式中的运算符
2.11 结合性和优先级
2.12 表达式何时不被求值
2.13 初始式
2.14 类型转换
2.15 控制台输入/输出
2.16 一个问题
2.17 小结
第3章 函数
3.1 再论main函数
3.2 实参与形参
3.3 用原型声明函数
3.4 定义和调用函数
3.5 函数返回
3.6 函数返回值
3.7 实参的传递和使用
3.8 未命名的函数形参
3.9 默认函灵敏实参
3.10 内联函数
3.11 递归
3.12 函数重载
3.13 小结
第4章 程序流程控制
4.1 语句块
4.2 条件测试
4.3 循环迭代
4.4 循环控制
4.5 跳转语句
4.6 小结
第5章 C++数据类型结构
5.1 作用域
5.2 存储类
5.3 初始默认值
5.4 类型限定词
5.5 程序存储器体系结构
5.6 小结
第6章 结构和联合
6.1 结构
6.2 联合
6.3 面向对象程序设计浅析
6.4 类
6.5 小结
第7章 C++数据进阶
7.1 枚举常量
7.2 类型强制转换
7.3 数组
7.4 sizeof运算符
7.5 typedef描述符
7.6 小结
第8章 指针、地址和动态存储器
8.1 指针和地址
8.2 堆的动态存储器分配
8.3 小结
第9章 引用变量
9.1 引用即别名
9.2 引用初始化
9.3 简化复杂表示法的引用
9.4 引用做函数形参
9.5 引用调用
9.6 const型引用形参
9.7 返回对自动变量的引用
9.8 const型返回引用
9.9 返回对自动变量的引用
9.10 指针与引用
9.11 小结
第10章 递归
10.1 递归函数
10.2 简单递归举例
10.3 递归下降计算器
10.4 递归的取舍
10.5 小结
第11章 预处理器
11.1 预处理指令
11.2 包含文件
11.3 宏
11.4 编译期条件指令
11.5 其他标准指令
11.6 深入#include指令
11.7 小结
第12章 函数模板
12.1 函数模板基础
12.2 函数模板专门化
12.3 用模板排序
12.4 小结
第13章 程序组织结构
13.1 程序的组成
13.2 安全类型链接
13.3 链接说明
13.4 argc和argv命令行实参
13.5 标准输入/输出重定向
13.6 打印报告
13.7 小结
第2部分 使用类
第14章 C++类
14.1 类声明
14.2 类成员
14.3 访问说明符: 类成员的可见性
14.4 结构和类的对比
14.5 数据成员
14.6 初始化
14.7 成员函数
14.8 面向对象类的设计
14.9 类对象的作用域和生存期
14.10 内联函数
14.11 小结
第15章 构造函数和析构函数
15.1 构造函数
15.2 析构函数
15.3 小结
第16章 转换
16.1 类转换
16.2 转换函数
16.3 转换类对象
16.4 调用转换函数
16.5 发生转换的上下文
16.6 显式构造函数
16.7 表达式内部的转换
16.8 小结
第17章 类对象数组
17.1 数组中的类对象
17.2 类对象数组和默认构造函数
17.3 类对象数组和析构函数
17.4 小结
第18章 类成员
18.1 this指针
18.2 操纵私用数据成员
18.3 static成员
18.4 小议const
18.5 mutable数据成员
18.6 引用数据成员
18.7 小结
第19章 友元
19.1 友元类
19.2 隐含构造
19.3 前向引用
19.4 显式友元前向引用
19.5 友元函数
19.6 非成员友元函数
19.7 小结
第20章 类和堆
20.1 构造函数和new,析构函数和delete
20.2 堆和类数组
20.3 重载类的new和delete运算符
20.4 测试异常
20.5 重载new和delete异常
20.6 生载类的new数组和delete数组
20.7 小结
第21章 重载运算符
21.1 重载与否
21.2 重载运算符的情况
21.3 重载运算符的规则
21.4 重载赋值运算符
21.5 二元算术运算符
21.6 关系运算符
21.7 其他赋值运算符
21.8 自动增量和自动减量
21.9 一元加、减运算符
21.10 下标运算符
21.11 成员指针运算符
21.12 小结
第22章 类库
22.1 对象与目标
22.2 组织和构建对象库
22.3 链接对象库
22.4 对象库的
22.5 库头文件
22.6 类模板库
22.7 小结
第23章 类的继承
23.1 类继承
23.2 专门化的数据抽象类设计
23.3 问题域类层次结构的设计
23.4 Person: 基类
23.5 派生类
23.6 建立对象库
23.7 使用问题域类层次结构
23.8 虚函数
23.9 虚析构函数
23.10 多态
23.11 小结
第24章 多重继承
24.1 多个基类
24.2 完善财产系统的设计
24.3 用多重继承覆盖成员
24.4 多重继承覆盖成员
24.5 虚基类
24.6 实现设计
24.7 练习
24.8 小结
第25章 类模板
25.1 类模板的基础知识
25.2 声明多个类模板对象
25.3 调用类模板成员函数
25.4 声明多个形参
25.5 重载运算符模板函数
25.6 默认实参值
25.7 有界数组的类模板
25.8 何时使用类模板
25.9 模板的专门化
25.10 默认类型的形参
25.11 关键字typename
25.12 类模板和抽象
25.13 小结
第3部分 使用类
第26章 标准C库函数
26.1 头文件
26.2 头文件
26.3 头文件
26.4 头文件
26.5 头文件
26.6 头文件
26.7 头文件
26.8 头文件
26.9 头文件
26.10 头文件
26.11 小结
第27章 标准C++库
27.1 字符串和IOStream模板
27.2 std::string类
27.3 IOStream类
27.4 std::complex类
27.5 小结
第28章 格式化IOStream和stringstream类
28.1 IOStream
28.2 格式化输出
28.3 操纵符、标记和成员函数
28.4 std::stringstream类
28.5 小结
第29章 文件I/O流
29.1 文件流对象
29.2 打开模式
29.3 二进制和文本文件流
29.4 std::ofstream类
29.5 文件流成员函数
29.6 std::ifstream类
29.7 读到文件尾
29.8 在文件中查找
29.9 读/写流文件的std::fstream类
29.10 文件和流的关联和分离
29.11 输入/输出的变化
29.12 测试错误
29.13 删除文件
29.14 小结
第4部分 标准模板库
第30章 STL简介
30.1 为什么需要STL
30.2 STL编程模型
30.3 序列
30.4 容器适配器
30.5 结合容器
30.6 迭代器
30.7 算法
30.8 谓词
30.9 分配器
30.10 小结
第31章 STL序列容器
31.1 序列容器
31.2 vector类模板
31.3 deque类模板
31.4 链表类模板
31.5 std::stack容器适配器
31.6 std::queue容器适配器
31.7 std::priority_queue容器适配器
31.8 小结
第32章 结合容器
32.1 结合容器
32.2 std::set类模板
32.3 std::multiset类模板
32.4 std::map类模板
32.5 std::multimap类模板
32.6 std::bitset类模板
32.7 用户自定义谓词
32.8 小结
第33章 通用算法
33.1 通用算法简介
33.2 非修改算法
33.3 变异算法
33.4 排序算法
33.5 数值算法
33.6 小结
第34章 迭代器
34.1 迭代器简介
34.2 输入迭代器
34.3 输出迭代器
34.4 前向迭代器
34.5 双向迭代器
34.6 随机访问迭代器
34.7 特殊用途迭代器
34.8 小结
第5部分 高级问题
第35章 异常处理
35.1 C的异常处理
35.2 C++的异常处理
35.3 全数捕捉异常处理函数
35.4 从处理函数中抛出异常
35.5 未捕捉的异常
35.6 在多个抛出的异常中选择
35.7 异常和未释放的资源
35.8 改进的计算器程序
35.9 标准异常
35.10 std::exception::what成员函数
35.11 异常说明
35.12 未预料到的异常
35.13 小结
第36章 名字空间
36.1 名字空间的问题
36.2 名字空间简介
36.3 引用名字空间的成员
36.4 using namespace语句
36.5 定义名字空间
36.6 嵌套的名字空间
36.7 未命名的名字空间
36.8 名字空间的别名
36.9 Koenig查找
36.10 小结
第37章 C++类型强制转换
37.1 C++类型强制转换
37.2 dynamic_cast运算符
37.3 static_cast运算符
37.4 reinterpret_cast运算符
37.5 const_cast运算符
37.6 小结
第38章 运行时类型信息
38.1 typeid运算符
38.2 type_info类
38.3 用RTTI编程
38.4 RTTI的用法
38.5 小结
第39章 区域表示
39.1 国际化元素
39.2 std::locale类
39.3 创建区域表示对象
39.4 创建混合的区域表示
39.5 流和区域表示
39.6 处理刻面
39.7 小结
第40章 面向对象程序设计
40.1 对象和C++程序员
40.2 基础知识
40.3 过程化程序设计
40.4 面向对象程序设计
40.5 小结
附录A 库清单
附录B 光盘内容
附录C Quincy 2002用户指南
附录D C++对照表
附录E 参考书目
词汇表
本书是《C++大学自学教程》的第7版,第l版惠蒙MIS出版社1990年出版发行。这是一本指导用书,读者一边在PC机上运行程序示例,一边参照案头的《C++大学自学教程》,达到学通C++的目的。
随着程序设计的长足发展,程序设计已不同以往。计算机图书行业今非昔比,笔者本人也有了变化。这些先按下不表,先谈谈本书适合哪些读者,读者应该如何使用本书。
本书的结构
本书第1部分的第1章至第13章介绍了C++语言的基本组成,主要是与C语言基本相似、同时也包含新成份的内容。
第1章介绍C++编程。本章包括C++简史和C+十程序设计语言综述,其中专门介绍了main函数,这是一切C++程序的入口点。
从第2章开始学习编写程序。讲解有关main函数的详细内容,如何在编码中加入注释,如何包含标准库的头文件,如何执行简单的控制台输出以观察程序结果。还将学习C++表达式和赋值语句。读者将了解如何从键盘和显示屏幕读数据。本章还讲授C++数据类型,包括字符、整数和浮点数。
第3章的重点是函数。本章介绍C++如何声明、定义和调用函数,如何传递形参对应的实参并获得返回值。读者将学习如何将C++函数组织成嵌套代码块,如何将C++程序模块与用其他语言(如C语言)编写的模块进行链接。
第4章介绍程序流程控制。将学习if...else,do,while,for,goto,switch,break,continue和return语句。
第5章涉及程序变量的组织。本章讲授变量作用域,将变量转换为常量的限定符和控制计算机在何处存储变量的限定符。
第6章讲授结构、类和联合。它们能够将数据组织成存储器中的数据记录格式。本章还通过对struct的扩展,介绍类的机制。读者可以学习内部和用户定义类型的数据抽象特性,数据成员和成员函数,以及访问说明符。本章介绍了C++与C语言的主要区别。
第7章讲授有关C++数据的详细知识,如枚举常量、数组定义、程序堆和栈、C风格的强制类型转换等。本章还介绍C++强制类型转换的基础知识。有关强制类型转换机制的高级课程将在第37章中讲授。
第8章讲授程序的指针变量和存储器地址。
第9章介绍引用变量。这是C++的特性,与指针类似,但不完全相同。
第10章讲授递归,这是当今大多数程序设计语言的特1,生,这个特性允许函数自我调用。本章解释其工作原理、使用价值、何时使用、为何在某些程序设计情况下要避免使用,以及怎样避免。
第11章的重点是C++预处理器。利用它可以定义宏,可编写编译时条件表达式,该条件表达式被用来控制程序的编译方式。
第12章解释函数模板。利用它可以生成适用于不同数据类型的通用函数。本章将学习模板的形参和实参,以及更高级的模板主题,如模板重载等。
第13章讲授程序的组织结构。它的命令行实参将多个已编译模块链接成一个可执行模块,还将说明如何在一个程序中包含C和C++两种源代码文件。
本书第2部分从第14章至第25章,讲授C++类机制,这是大多数标准C++库实现都用到的语言特性,也是用户扩展C++的一种方法。
第14章讨论类。说明如何设计含有数据成员和成员函数的类。
第15章介绍类的构造函数和析构函数。它们是两个特殊的成员函数:构造函数是使用类的程序对该类的对象进行实例化时执行的特殊成员函数,析构函数是程序结束一个类的对象时执行的特殊成员函数。
第16章是关于C++类型转换的内容。通过使用程序中的转换函数,一个类的对象可以自动转换为其他类的对象。
第17章介绍类对象数组,以及为满足其要求在类设计中应有的特别考虑。
第18章详细讲解类成员。介绍它们如何工作,如何对声明方式做出反映。
第19章讲解C++“友元”函数的特性。它使函数可以访问类的隐藏成员。
第20章说明类如何使用堆存储器,以及程序如何修改这一行为。
第21章介绍重载运算符。当这一特性用在包含算术、关系和其他运算符的表达式中时,类对象能够模仿内部数据类型的行为。
第22章说明如何创建和使用类库。本章构建了两个供后续章节使用的类库。
第23章介绍类继承。这一特性使用户能够创建由基类和派生类组成的面向对象的类层次结构。本章还学习被称为多态的面向对象属性。
第24章主要介绍多重继承。这是C++的特性,可使派生类继承多个基类的特性。
第25章讨论类模板。这是C++的特性,可使用户创建通用的参数化类。
本书第3部分从第26章至第29章,详细介绍标准C++库的各个组成部分,包括C++继承自标准C的部分。
第26章讨论标准C库函数。本章将学习如何为程序所调用的标准函数调用头文件,还将学习字符串函数、存储器分配函数、数学函数等。
第Z7章介绍标准C++库。通过学习本章,可增加对输入/输出类iostream的了解。本章也介绍标准的string和complex类。
第28章介绍iostream和stringstream类中字符串数据的管理和格式化。
第29章讲解使用C++流来操纵磁盘文件,包括读写文件的流类。还将学习文本和二进制文件之间的差别。
本书第4部分从第30章至第34章,介绍标准模板库(SⅧ),这是一个模板类的库,实现通用容器、算法和迭代器。读者在第4部分中将学习通用编程。
第30章介绍在STL中定义的类的各种类型,包括序列、结合容器、算法和迭代器等对象的类。读者将学习由STL实现并支持的通用编程模型。
第31章讲授如何用STL序列类进行程序设计。这一功能实现链表、队列、栈、向量等。
第3Z章说明如何使用结合容器类。结合容器类实现map,set和bitset。
第33章主要解释通用算法。这是一个函数库,可使程序处理STL对象定义的数据。这种处理包括计算、排序和分组。
第34章解释STL迭代器。这是指针的一个特殊类型,可使程序对容器进行前向或反向迭代访问。本章还学习如何使用迭代器获取在容器中存储的元素信息。
本书第5部分从第35章至第40章,讨论标准C++支持的高级特性。
第35章讲授异常处理。这一特性可使程序以有序的方式抛出或捕捉异常。
第36章介绍名字空间,包括关于如何定义名字空间的讨论。本章还解释名字空间的作用域解析、未命名的名字空间和名字空间别名。
第37章介绍高级的C++类型强制转换机制,包括动态强制、静态强制和常量强制。
第38章介绍C+十运行时类型信息(RTTI)。这是程序在运行时确定对象有关信息的方法。
第38章介绍C++区域表示(locale)类,以及如何使用区域表示类让应用程序国际化。读者将学习设置区域表示,以及如何按区域表示所需的格式显示信息。
第40章介绍面向对象设计和编程的技巧,包括抽象、封装、继承和多态等。
附录A包含本书示例程序使用的类库源代码清单。
附录B介绍本书附带的光盘。
附录C是Quincy 2002集成开发环境的简要使用指南。读者可用该环境编译、调试和运行程序练习,并可用其编写自己的C++程序练习。 :
附录D用便于参照的表格形式介绍C++语言的组成。
附录E是文献参考书目录。
词汇表定义了部分常用的C++程序设计专用术语。如果读者对本书中某个词汇不熟悉,可查询词汇表。如果表中没有,可发送邮件至astevens@ddj.com向笔者查询。