内容简介
第1章 了解C++语言
1.1 计算机语言
1.2 C++语言简史
1.3 C++的基本概念
1.4 C++语言增强类型
1.5 C++环境
1.6 C++语言前景
1.7 C++基本知识点小结
第2章 初识C++程序
2.1 最小的C++程序
实例2-1
2.2 功能最简单的C++程序
实例2-2
2.2.1 预处理指令
2.2.2 头文件
2.2.3 空格和空行
2.2.4 main()函数的声明
2.2.5 main()函数的作用范围
2.2.6 源程序注释
2.2.7 控制台输出
2.2.8 return语句
2.2.9 程序的结束
第3章 C++基础知识
3.1 标识符
3.2 关键字
3.3 标准输出流
3.4 变量
3.4.1 布尔型变量
实例3-1
3.4.2 字符型变量
实例3-2
3.4.3 wchar_t型变量
实例3-3
3.4.4 整型变量
实例3-4
3.4.5 浮点型变量
实例3-5
3.5 常量
3.5.1 字符型常量
3.5.2 转义字符
3.5.3 整型常量
3.5.4 浮点型常量
3.5.5 地址常量
3.5.6 字符串常量
实例3-6
3.6 表达式
3.7 赋值语句
实例3-7
3.8 用逗号分隔开的声明语句
3.9 表达式中的运算符
3.9.1 算术运算符
实例3-8
3.9.2 逻辑运算符
3.9.3 位逻辑运算符
3.9.4 位移运算符
3.9.5 关系运算符
3.9.6 自增和自减运算符
实例3-9
3.9.7 赋值运算符
实例3-10
3.9.8 复合赋值运算符
实例3-11
3.9.9 条件运算符
实例3-12
3.9.10 逗号运算符
实例3-13
3.10 优先级和计算顺序
3.10.1 结合律
3.10.2 优先级
3.11 表达式不参加运算的情况
3.12 初始化
实例3-14
3.13 类型转换
实例3-15
3.14 控制台输入与输出
3.14.1 标准输出流
实例3-16
3.14.2 格式化输出
实例3-17
3.14.3 标准错误流
3.14.4 标准输入流
实例3-18
实例3-19
第4章 C++函数
4.1 C++函数简介
4.1.1 函数头
4.1.2 语句体
4.1.3 main()函数及函数调用
4.1.4 形参和实参
4.2 函数原型
4.2.1 无标识符的参数类型
4.2.2 函数原型实例
4.2.3 void型函数
4.2.4 无参数的函数
4.2.5 参数个数可变的函数
4.2.6 既没有返回值也不带参数的函数
4.2.7 标准库函数的原型
4.2.8 不需要原型的函数
4.3 函数的定义
实例4-1
4.4 函数的返回
实例4-2
4.5 函数的返回值
实例4-3
4.6 参数的传递和使用
实例4-4
4.6.1 标识符的作用域
4.6.2 通过函数调用来初始化
4.6.3 初始化执行的顺序
4.6.4 传递多个参数
实例4-5
4.6.5 用做实参的函数调用
4.6.6 值传递
4.6.7 实参和返回值的类型转换
4.7 无名的函数形参
4.8 函数默认参数
实例4-6
4.9 内联函数
实例4-7
4.10 递归
4.11 函数重载
4.11.1 为完成不同的操作而重载
实例4-8
4.11.2 为不同的格式而重载
实例4-9
4.12 安全连接
4.13 连接说明
实例4-10
第5章 C++控制结构
5.1 语句块
5.1.1 多层嵌套
5.1.2 嵌套深度
5.1.3 缩进风格
5.2 条件语句
5.2.1 if语句
实例5-1
实例5-2
实例5-3
5.2.2 if...else语句
实例5-4
5.2.3 else...if语句
实例5-5
5.2.4 switch...case语句
实例5-6
5.2.5 在if语句的条件表达式里声明变量
5.3 循环语句
5.3.1 while语句
实例5-7
5.3.2 do...while语句
实例5-8
5.3.3 for语句
实例5-9
实例5-10
5.3.4 在for语句的条件表达式内声明变量
5.4 循环控制
5.4.1 break语句
实例5-11
5.4.2 continue语句
实例5-12
5.5 goto语句
实例5-13
5.5.1 goto语句的错误用法
5.5.2 goto语句错误的改正
实例5-14
实例5-15
5.5.3 是否可以使用goto语句
5.6 小结
第6章 作用域
6.1 全局作用域
实例6-1
6.2 局部作用域
实例6-2
实例6-3
6.3 全局作用域解析符
实例6-4
6.4 文件作用域
实例6-5
6.5 作用域和生存周期
实例6-6
第7章 C++数据类型
7.1 存储类型
7.1.1 自动存储类型
7.1.2 静态存储类型
实例7-1
7.1.3 外部存储类型
实例7-2
7.1.4 寄存器存储类型
实例7-3
7.2 初始化的默认值
7.3 类型修饰符
7.3.1 const类型修饰符
实例7-4
7.3.2 volatile类型修饰符
实例7-5
7.4 用户定义的数据类型
7.4.1 结构的声明
7.4.2 结构变量的定义
7.4.3 对结构成员的引用
实例7-6
7.4.4 结构的初始化
实例7-7
7.4.5 结构的嵌套
实例7-8
7.4.6 向函数传递结构和从函数返回结构
实例7-9
7.5 联合数据类型
实例7-10
7.5.1 联合的初始化
实例7-11
7.5.2 匿名联合
实例7-12
7.5.3 枚举常量
实例7-13
第8章 数组
8.1 数组的声明
8.2 利用下标访问数组元素
8.3 数组的初始化
实例8-1
8.4 结构数组
实例8-2
8.5 多维数组
实例8-3
8.6 字符型数组
实例8-4
第9章 指针和地址
9.1 指向内部数据类型的指针
实例9-1
9.2 指针的算术运算
实例9-2
实例9-3
9.3 指针和数组
实例9-4
实例9-5
9.4 结构指针
实例9-6
9.5 用做函数参数的指针
实例9-7
实例9-8
9.6 以地址作为函数的返回值
实例9-9
实例9-10
9.7 函数指针
实例9-11
实例9-12
9.8 指针的指针
实例9-13
9.9 指向指针数组的指针
实例9-14
9.10 指向const型变量的指针
实例9-15
9.11 const型指针变量
实例9-16
9.12 void型指针
实例9-17
9.13 sizeof运算符
实例9-18
9.14 C风格的强制类型转换与typedef
实例9-19
9.15 命令行参数
实例9-20
9.16 程序的内存结构
9.16.1 堆
9.16.2 new和delete运算符
实例9-21
9.16.3 为固定大小的数组分配内存
实例9-22
9.16.4 为动态数组分配内存
实例9-23
9.16.5 堆耗尽时的处理
9.16.6 栈
9.17 递归
9.17.1 一个简单递归的例子
实例9-24
9.17.2 一个使用了递归的计算器程序
实例9-25
第10章 引用
10.1 引用与指针的比较
10.2 引用是一个别名
实例10-1
实例10-2
10.3 引用的初始化
10.4 利用引用来简化复杂的表示法
实例10-3
10.5 作为函数形参的引用
实例10-4
10.6 以引用方式调用
实例10-5
10.7 const型引用形参
10.8 以引用作为返回值
实例10-6
10.9 以const型引用作为返回值
10.10 返回指向自变量的引用
10.11 指针和引用的使用场合
第11章 库函数和宏
11.1 <cassert>
实例11-1
11.2 <cctype>
11.3 <cerrno>
实例11-2
11.4 <cmath>
11.5 <csetjmp>
实例11-3
11.6 <cstdarg>
实例11-4
11.7 <cstdio>
11.8 <cstdlib>
11.8.1 数字函数
11.8.2 内存管理函数
11.8.3 系统函数
11.8.4 随机数发生器函数
实例11-5
11.9 <cstring>
实例11-6
11.10 <ctime>
实例11-7
第12章 预处理
12.1 预处理指令
12.2 文件的包含与#include指令
12.3 宏
12.3.1 #define指令
12.3.2 带参数的#define指令
实例12-1
实例12-2
12.3.3 格式和对齐
12.3.4 #运算符
实例12-3
12.3.5 ##运算符
实例12-4
实例12-5
12.3.6 #undef指令
12.4 条件编译指令
12.4.1 #if指令
12.4.2 #endif指令
实例12-6
12.4.3 #if defined指令
实例12-7
12.4.4 #ifdef和#ifndef指令
12.4.5 #else指令
实例12-8
12.4.6 #elif指令
实例12-9
12.4.7 #error指令
实例12-10
12.5 其他标准指令
12.5.1 #line指令
12.5.2 #pragma指令
第13章 C++结构与类
13.1 C++的类
13.2 数据类型的属性
13.2.1 数据描述
13.2.2 实现
13.2.3 性质
13.2.4 接口
13.3 自定义数据类型
13.3.1 抽象
13.3.2 对象是什么
13.3.3 数据抽象和面向过程编程
实例13-1
13.3.4 数据抽象和封装
13.4 带有函数的结构体
13.4.1 向结构体添加函数
实例13-2
13.4.2 同一结构的多个实例
实例13-3
13.4.3 具有相同函数名的不同结构
实例13-4
13.5 访问控制符
13.6 面向过程的编程方法
13.7 类与结构的比较
13.8 联合体
第14章 C++函数模板
14.1 函数模板基础
实例14-1
实例14-2
14.2 函数的定制
实例14-3
实例14-4
14.3 使用模板排序
实例14-5
实例14-6
第15章 类
15.1 类的设计
15.1.1 类的声明
实例15-1
15.1.2 类的成员
15.1.3 类成员的可见性
15.1.4 数据成员
15.1.5 初始化
15.1.6 成员函数
15.1.7 面向对象的类的设计方法
15.1.8 类对象的作用域
15.1.9 内联函数
实例15-2
15.2 构造函数
15.2.1 使用默认参数的构造函数
实例15-3
15.2.2 默认构造函数
15.2.3 重载构造函数
实例15-4
15.3 析构函数
15.4 类的转换
15.4.1 转换函数
15.4.2 转换构造函数
实例15-5
15.4.3 成员转换函数
实例15-6
15.4.4 类的转换
实例15-7
15.4.5 转换函数的调用
实例15-8
15.4.6 其他转换方法
实例15-9
15.4.7 显式构造函数
15.4.8 表达式内部的转换
实例15-10
15.5 私有数据成员的使用
15.5.1 取值和赋值成员函数
实例15-11
15.5.2 常量成员函数
15.5.3 改进的成员转换函数
实例15-12
15.6 友元
15.6.1 友元类
实例15-13
15.6.2 隐式构造函数
15.6.3 前向引用
15.6.4 显式友元前向引用
实例15-14
15.6.5 友元函数
实例15-15
15.6.6 匿名对象
15.6.7 非类成员的友元函数
实例15-16
15.7 析构函数的使用
实例15-17
15.8 重载赋值运算符
实例15-18
15.9 this指针
15.9.1 以this指针作为返回值
实例15-19
15.9.2 在链表中使用this指针
实例15-20
15.10 类对象数组
实例15-21
15.10.1 类对象数组和默认构造函数
实例15-22
15.10.2 类对象数组和析构函数
实例15-23
15.11 静态成员
15.11.1 静态数据成员
实例15-24
15.11.2 静态成员函数
实例15-25
15.11.3 公有静态成员
15.12 类和堆
15.12.1 构造函数和析构函数
实例15-26
15.12.2 堆和类数组
实例15-27
实例15-28
15.12.3 重载new和delete运算符
实例15-29
15.12.4 检测异常
15.12.5 重载new和delete中的异常处理
15.12.6 重载new[ ]和delete[ ]
实例15-30
15.13 副本构造函数
实例15-31
15.14 类的引用
实例15-32
15.15 构造函数的参数初始化表
15.16 对const修饰符的简单说明
15.17 可变的数据成员
实例15-33
15.18 类的源文件和目标文件的管理
15.18.1 头文件中的类声明
15.18.2 库中的类成员函数
第16章 运算符重载
16.1 运算符重载的场合
16.2 运算符重载的规则
16.3 双目算术运算符
16.4 作为类成员的运算符函数
实例16-1
16.5 非类成员的运算符函数
实例16-2
16.6 关系运算符
实例16-3
16.7 其他的赋值运算符
实例16-4
16.8 自增和自减运算符
实例16-5
16.9 单目正、负运算符
实例16-6
16.10 下标运算符
实例16-7
16.11 成员指针运算符
实例16-8
第17章 类的继承
17.1 继承
17.2 使用继承的原因
17.3 数据抽象类的设计
17.3.1 基类
实例17-1
17.3.2 效率设计
实例17-2
17.3.3 单继承
17.3.4 派生类
实例17-3
17.3.5 受保护的成员
17.3.6 派生类的成员和定制的成员
17.3.7 公有和私有的基类
17.3.8 基类和派生类的构造函数
17.3.9 定制新的成员函数
17.3.10 重定义基类的成员函数
实例17-4
17.3.11 编写程序
实例17-5
17.3.12 用于基类和派生类的作用域运算符
实例17-6
17.3.13 多个派生类
17.3.14 第二个派生类
实例17-7
实例17-8
17.3.15 使用基类和派生类
实例17-9
17.3.16 派生类之间的关系
17.3.17 从派生类派生出的类
实例17-10
实例17-11
17.4 类层次结构的设计
17.4.1 C++与纯面向对象的设计
17.4.2 数据抽象
17.4.3 重载运算符<<和>>
实例17-12
实例17-13
17.4.4 两个更为抽象的数据
实例17-14
实例17-15
实例17-16
实例17-17
17.4.5 包含头文件
17.4.6 C++标准字符串类
17.5 基类Person
实例17-18
实例17-19
17.5.1 类中的枚举数据类型
17.5.2 虚函数
17.5.3 纯虚函数
17.5.4 两种显示方式
17.6 派生类
17.6.1 类Employee
实例17-20
实例17-21
17.6.2 函数重载
17.6.3 类WagedEmployee
实例17-22
实例17-23
17.6.4 类SalariedEmployee
实例17-24
实例17-25
17.6.5 类Contractor
实例17-26
实例17-27
17.6.6 构造目标代码库
17.6.7 使用问题域类层次结构
实例17-28
17.6.8 用引用方式调用虚函数
17.6.9 用引用方式调用非虚函数
17.6.10 对重定义的虚函数的调用
17.6.11 派生类没有重定义的虚函数
17.6.12 虚析构函数
实例17-29
实例17-30
17.6.13 应该定义为虚函数的成员函数
17.7 多态性
第18章 类的多重继承
18.1 多个基类
18.1.1 多重继承中的构造函数的执行
18.1.2 多重继承中的析构函数的执行
18.2 细化资产系统的设计
18.3 重定义多重继承中的成员
18.4 多重继承中的二义性
18.4.1 二义性成员函数
18.4.2 二义性数据成员
18.4.3 在设计时解决二义性问题
18.4.4 不可避免的二义性问题
18.5 虚基类
18.6 设计的实现
18.6.1 类DisplayObject
实例18-1
18.6.2 类Vehicle
实例18-2
18.6.3 类Property
实例18-3
18.6.4 类Asset和Expense
实例18-4
实例18-5
18.6.5 类Computer和Pencile
18.6.6 类CompanyCar和LeaseCar
实例18-6
18.6.7 应用程序
实例18-7
18.7 回顾
第19章 类模板
19.1 类模板的基本知识
19.2 声明模板类的多个对象
19.3 调用类模板的成员函数
19.4 声明多个参数
实例19-1
实例19-2
19.5 有界数组类模板
实例19-3
实例19-4
19.6 何时使用类模板
19.7 链表模板
实例19-5
19.7.1 整数值对象链表
实例19-6
19.7.2 日期对象链表
实例19-7
19.8 定制模板
19.8.1 定制类模板
实例19-8
19.8.2 定制模板成员函数
实例19-9
19.8.3 模板的部分定制
实例19-10
19.9 类模板的默认参数
实例19-11
第20章 面向对象的程序设计
20.1 基本知识
20.2 过程化程序设计
20.3 面向对象的程序设计
20.3.1 面向对象的程序
20.3.2 对象
20.3.3 抽象
20.3.4 封装
20.3.5 方法和消息
20.3.6 功能性方法
20.3.7 数据类型方法
20.3.8 隐式类型转换方法
20.3.9 成员函数
20.3.10 继承
20.3.11 单继承
20.3.12 多重继承
20.3.13 类的关系
20.3.14 多态性
20.4 小结
第21章 C++标准库
21.1 类std∷string
21.1.1 构造字符串
21.1.2 给字符串赋值
21.1.3 字符串连接
21.1.4 字符串的下标
21.1.5 字符串的比较
21.1.6 子串
21.1.7 搜索字符串
21.1.8 字符串操作
21.2 输入/输出流
21.2.1 流类
21.2.2 缓冲输出
21.2.3 格式化输出
实例21-1
实例21-2
实例21-3
实例21-4
实例21-5
实例21-6
21.2.4 文件的输入/输出
21.3 类std∷complex
实例21-7
21.4 标准模板类
21.5 标准异常
实例21-8
第22章 字符串输出与处理
22.1 格式化输出
实例22-1
22.2 操纵算子、标志和成员函数
22.2.1 函数ios∷width
实例22-2
22.2.2 操纵算子std∷setw
实例22-3
22.2.3 函数std∷ios∷fill
实例22-4
22.2.4 输出对齐
实例22-5
22.2.5 操纵算子setprecision
实例22-6
22.2.6 科学记数法和定点记数法
实例22-7
22.2.7 函数std∷ios∷setf和std∷ios∷unsetf
22.2.8 格式化标志
22.2.9 格式化操纵算子
22.2.10 格式化函数
实例22-8
实例22-9
实例22-10
第23章 输入流和输出流
23.1 文件流类的层次结构
23.2 类std∷ofstream
实例23-1
实例23-2
实例23-3
实例23-4
实例23-5
23.3 类ifstream
实例23-6
23.3.1 读取文件直至文件结束
实例23-7
23.3.2 在文件中定位
实例23-8
实例23-9
23.3.3 读取和写入流文件
实例23-10
23.3.4 文件和流的关联与解除关联
实例23-11
23.4 二进制文件与文本文件
23.5 类std∷fstream
实例23-12
第24章 标准模板库
24.1 为什么需要STL
24.2 STL编程模型
24.2.1 序列
24.2.2 容器适配器
24.2.3 关联式容器
24.2.4 指示器
24.2.5 算法
24.2.6 函数对象参数
24.2.7 内存分配器
第25章 序列容器
25.1 序列容器简介
25.2 向量类模板
实例25-1
25.2.1 插入和访问向量元素
实例25-2
实例25-3
25.2.2 删除向量元素
实例25-4
实例25-5
25.2.3 向量的比较
实例25-6
25.2.4 向量的成员函数
25.3 双端队列类模板
实例25-7
25.3.1 插入和访问双端队列的元素
实例25-8
实例25-9
25.3.2 删除双端队列的元素
实例25-10
实例25-11
25.3.3 比较双端队列
实例25-12
25.3.4 双端队列的成员函数
25.4 链表类模板
实例25-13
25.4.1 插入链表元素
实例25-14
实例25-15
25.4.2 删除链表元素
实例25-16
实例25-17
25.4.3 比较链表
实例25-18
25.4.4 链表成员函数
25.5 容器适配器std∷stack
实例25-19
25.6 容器适配器std∷queue
实例25-20
25.7 容器适配器std∷priority_queue
实例25-21
第26章 关联式容器
26.1 关联式容器简介
26.2 类模板std∷set
实例26-1
26.2.1 插入集合元素
实例26-2
26.2.2 删除集合中的元素
实例26-3
26.2.3 对集合进行搜索
实例26-4
26.2.4 在集合之间进行比较
实例26-5
26.2.5 集合的成员函数
26.3 类模板std∷multiset
实例26-6
26.3.1 插入std∷multiset元素
实例26-7
26.3.2 删除多重集合的元素
实例26-8
26.3.3 对std∷multiset进行搜索
实例26-9
26.3.4 在std∷multiset集合之间进行比较
实例26-10
26.3.5 多重集合的成员函数
26.4 类模板std∷map
实例26-11
26.4.1 插map元素
实例26-12
实例26-13
26.4.2 删除映射中的元素
实例26-14
26.4.3 对映射进行搜索
实例26-15
26.4.4 在映射之间进行比较
实例26-16
26.4.5 映射成员函数
26.5 类模板std∷multimap
实例26-17
26.5.1 插入multimap元素
26.5.2 删除多重映射的元素
实例26-18
26.5.3 搜索多重映射
实例26-19
26.5.4 对多重映射进行比较
实例26-20
26.5.5 多重映射的成员函数
26.6 类模板std∷bitset
26.6.1 在位集合中对位进行操作
实例26-21
26.6.2 在位集合中测试位
实例26-22
26.6.3 比较位集合
实例26-23
26.6.4 位集合的成员函数
26.7 用户定义的谓词
实例26-24
26.8 小结
第27章 通用算法
27.1 通用算法简介
27.2 非修正序列算法
实例27-1
实例27-2
实例27-3
27.3 修正序列算法
实例27-4
实例27-5
实例27-6
实例27-7
27.4 排序算法
实例27-8
实例27-9
实例27-10
实例27-11
实例27-12
27.5 数值算法
实例27-13
实例27-14
实例27-15
实例27-16
第28章 指示器
28.1 指示器简介
28.2 输入指示器
实例28-1
28.3 输出指示器
实例28-2
28.4 前向指示器
实例28-3
28.5 双向指示器
实例28-4
28.6 随机访问指示器
实例28-5
28.7 特殊用途指示器
28.7.1 流指示器
实例28-6
实例28-7
28.7.2 指示器适配器
实例28-8
实例28-9
实例28-10
第29章 C++异常处理
29.1 C中的异常处理
29.2 C++中的异常处理
29.2.1 try块
29.2.2 catch异常处理器
29.2.3 throw语句
29.2.4 try/throw/catch系列
实例29-1
实例29-2
29.2.5 异常情况指定
29.2.6 不可预见的异常
29.2.7 catch-all异常处理模块
实例29-3
29.2.8 从处理模块中抛出异常
实例29-4
29.2.9 没有被捕获的异常
实例29-5
实例29-6
29.3 在抛出的异常中进行选择
29.4 异常情况以及没有被释放的资源
29.5 一个改进的计算器程序
实例29-7
第30章 名字空间
30.1 名字空间简介
30.2 有关名字空间的成员
实例30-1
30.3 using namespace语句
实例30-2
实例30-3
实例30-4
30.4 定义名字空间
实例30-5
30.5 嵌套名字空间
实例30-6
30.6 无名名字空间
30.7 名字空间的别名
实例30-7
第31章 新风格类型转换和typeid运算符
31.1 新风格类型转换
31.1.1 动态类型转换
实例31-1
实例31-2
31.1.2 静态类型转换
实例31-3
31.1.3 重新解释类型转换
实例31-4
31.1.4 常类型转换
实例31-5
31.2 typeid运算符
实例31-6
第32章 区域表示
32.1 国际化元素
32.2 std∷locale类
32.2.1 标准侧面
32.2.2 默认区域表示与全局区域表示
32.3 生成区域表示对象
实例32-1
32.4 生成混合区域表示
实例32-2
32.5 流与区域表示
实例32-3
32.6 操作侧面
实例32-4
附录A 数值系统
附录B 运算符的优先级与结合律
附录C ASCII字符集
附录D C与C++的区别
附录E 标准C++特性总结
附录F 标准异常
附录G C++术语与概念
练习题
练习题答案
教师选用习题