本书紧随C++发展的步伐, 立足于培养工程实践能力强、 创新能力强、 具备国际竞争力的高素质复合型“新工科”人才, 是全面采用C++11新标准编写的面向对象程序设计的教材。本书不仅讲解新标准下C++的基本语法, 展现C++的发展现状, 更注重编程思维和解决实际问题的能力的培养。本书结合算法与数据结构, 通过简明的例子讲解C++的特性和使用方法。内容涵盖新标准下C++基本语法、 面向对象程序设计核心技术、 基本数据结构, 以及常用算法和工具。本书适用于高等学校理工科各专业的C++程序设计、 面向对象程序设计等课程, 也可供初级或中高级程序员及工程技术人员参考使用。
李长河,中国地质大学(武汉)自动化学院自动化研究所副所长,副教授,IEEE计算智能协会进化计算技术委员会动态和不确定环境下的进化计算专业委员会副主席, IEEE会员,自动化学会青年工作委员会委员。湖北省楚天学者计划-楚天学子(2013年),中国地质大学(武汉)地大学者-青年拔尖人才计划入选者(2015年),中国地质大学(武汉)腾飞计划入选者(2017年)。获湖北省第十五届自然科学优秀学术论文三等奖1项,中国地质大学(武汉)青年教师讲课比赛二等奖2项。主持国家自然科学基金项目2项,参与国家自然科学基金项目2项,参与英国工程和自然科学委员会EPSRC项目2项。
第1 部分 基 础 篇
第1 章 初识C++ 程序
1. 1 编写一个简单的C++ 程序
1. 2 认识类
1. 3 编译与调试程序
习题1
第2 章 基本数据类型和表达式
2. 1 C++ 语句基本元素
2. 1. 1 标识符
2. 1. 2 关键字
2. 2 基本数据类型
2. 2. 1 内置类型
2. 2. 2 常量
2. 3 对象
2. 3. 1 对象的定义和初始化
2. 3. 2 对象的声明
2. 3. 3 作用域和生命期
2. 4 常量修饰符和类型推导
2. 4. 1 const 修饰符
2. 4. 2 constexpr 和常量表达式
2. 4. 3 类型推导
2. 5 表达式
2. 5. 1 基本知识
2. 5. 2 算术运算符
2. 5. 3 赋值运算符
2. 5. 4 自增和自减运算符
2. 5. 5 逻辑和关系运算符
2. 5. 6 逗号运算符
2. 5. 7 条件运算符
2. 5. 8 sizeof 运算符
2. 5. 9 位运算符
2. 5. 10 求值次序
2. 6 类型转换
2. 6. 1 隐式类型转换
2. 6. 2 显式类型转换
习题2
第3 章 语句控制结构
3. 1 语句
3. 1. 1 空语句
3. 1. 2 复合语句
3. 1. 3 控制结构语句作用域
3. 2 分支结构
3. 2. 1 if 语句
3. 2. 2 switch 语句
3. 3 循环结构
3. 3. 1 while 语句
3. 3. 2 do while 语句
3. 3. 3 for 语句
3. 3. 4 循环语句的选择
3. 4 跳转语句
3. 4. 1 break 语句
3. 4. 2 continue 语句
3. 5 嵌套结构和应用实例
习题3
第4 章 复合类型、string 和vector
4. 1 引用
4. 1. 1 引用const 对象
4. 1. 2 auto 和引用
4. 1. 3 decltype 和引用
4. 1. 4 右值引用
4. 2 指针
4. 2. 1 指针的定义
4. 2. 2 改变指向
4. 2. 3 const 和指针
4. 2. 4 类型推导和指针
4. 2. 5 void 指针
4. 2. 6 多级指针
4. 2. 7 引用和指针
4. 3 数组
4. 3. 1 数组的定义和初始化
4. 3. 2 访问数组元素
4. 3. 3 多维数组
4. 4 指针和数组
4. 4. 1 指针指向数组
4. 4. 2 利用指针访问数组
4. 5 string 类型
4. 5. 1 string 类型常用操作
4. 5. 2 C 风格字符串
4. 6 vector 类型
4. 6. 1 定义和初始化vector对象
4. 6. 2 vector 类型常用操作
4. 6. 3 使用迭代器
4. 7 枚举类型
4. 7. 1 定义枚举类型
4. 7. 2 使用枚举类型
习题4
第5 章 函数
5. 1 认识函数
5. 1. 1 定义函数
5. 1. 2 调用函数
5. 1. 3 调用规则
5. 1. 4 无参列表和void 返回类型
5. 1. 5 函数声明
5. 2 局部对象和全局对象
5. 2. 1 存储周期
5. 2. 2 局部对象
5. 2. 3 全局对象
5. 3 参数传递
5. 3. 1 值传递
5. 3. 2 引用传递
5. 3. 3 const 形参
5. 3. 4 数组形参
5. 4 返回值类型
5. 4. 1 无值返回
5. 4. 2 有值返回
5. 5 函数重载和特殊用途的函数
5. 5. 1 函数重载
5. 5. 2 默认参数
5. 5. 3 内联函数
5. 5. 4 constexpr 函数
5. 6 函数指针和lambda 表达式
5. 6. 1 函数指针
5. 6. 2 lambda 表达式
5. 7 递归调用
5. 7. 1 递推和回归
5. 7. 2 递归和循环
5. 8 编译预处理和多文件结构
5. 8. 1 宏定义
5. 8. 2 条件编译
5. 8. 3 多文件结构
习题5
第6 章 类
6. 1 类的定义
6. 1. 1 定义一个类
6. 1. 2 定义和使用成员函数
6. 1. 3 定义辅助函数
6. 1. 4 访问控制
6. 1. 5 友元
6. 2 构造函数与析构函数
6. 2. 1 默认构造函数
6. 2. 2 复制构造函数
6. 2. 3 析构函数
6. 3 运算符重载
6. 3. 1 基本概念
6. 3. 2 重载原则
6. 3. 3 输入和输出运算符
6. 3. 4 递增和递减运算符
6. 3. 5 函数调用运算符
6. 3. 6 类型转换运算符
6. 4 静态成员
6. 4. 1 声明静态成员
6. 4. 2 使用静态成员
6. 5 类成员指针
6. 5. 1 数据成员指针
6. 5. 2 成员函数指针
习题6
第2 部分 设 计 篇
第7 章 模板与泛型编程
7. 1 函数模板
7. 1. 1 定义函数模板
7. 1. 2 实例化函数模板
7. 1. 3 模板参数类型
7. 1. 4 类成员模板
7. 1. 5 可变参函数模板
7. 2 类模板
7. 2. 1 成员函数定义
7. 2. 2 实例化类模板
7. 2. 3 默认模板参数
7. 3 排序与查找
7. 3. 1 排序算法
7. 3. 2 二分查找算法
习题7
第8 章 动态内存与数据结构
8. 1 动态内存
8. 1. 1 创建动态对象
8. 1. 2 释放动态内存
8. 1. 3 内存泄漏
8. 1. 4 智能指针
8. 1. 5 动态数组
8. 2 拷贝控制淤
8. 2. 1 简单字符串类
8. 2. 2 复制与赋值
8. 2. 3 移动对象
8. 3 线性链表
8. 3. 1 链表表示
8. 3. 2 插入操作
8. 3. 3 删除操作
8. 3. 4 清空链表
8. 3. 5 打印链表
8. 3. 6 拷贝控制与友元声明
8. 4 链栈
8. 4. 1 链栈表示与操作
8. 4. 2 简单计算器
8. 5 二叉树
8. 5. 1 二叉树的概念和表示
8. 5. 2 创建二叉搜索树
8. 5. 3 遍历操作
8. 5. 4 搜索操作
8. 5. 5 销毁操作
8. 5. 6 拷贝控制及友元声明
习题8
第9 章 继承与多态
9. 1 继承
9. 1. 1 定义基类
9. 1. 2 定义派生类
9. 1. 3 访问控制
9. 1. 4 类型转换
9. 2 构造、拷贝控制与继承
9. 2. 1 派生类对象的构造
9. 2. 2 拷贝控制与继承
9. 3 虚函数与多态性
9. 3. 1 虚函数
9. 3. 2 动态绑定
9. 3. 3 抽象类
9. 3. 4 继承与组合
9. 3. 5 再探计算器
习题9
第10 章 简单输入输出
10. 1 基本知识
10. 1. 1 IO 类对象
10. 1. 2 条件状态
10. 1. 3 刷新缓冲区
10. 2 标准输入输出
10. 2. 1 字符数据的输入
10. 2. 2 格式化控制
10. 3 文件输入输出与string 流
10. 3. 1 使用文件流对象
10. 3. 2 文件模式
10. 3. 3 string 流
习题10
第11 章 标准模板库
11. 1 迭代器
11. 1. 1 实现Find 函数模板
11. 1. 2 使用迭代器
11. 2 容器
11. 2. 1 容器概述
11. 2. 2 顺序容器
11. 2. 3 关联容器
11. 2. 4 高效使用容器
11. 3 泛型算法
11. 3. 1 算法概述
11. 3. 2 向算法传递函数
11. 3. 3 参数绑定
11. 3. 4 使用function
习题11
第12 章 工具与技术
12. 1 命名空间
12. 1. 1 定义命名空间
12. 1. 2 使用命名空间
12. 2 异常处理
12. 2. 1 抛出异常
12. 2. 2 检测异常
12. 2. 3 捕获异常
12. 2. 4 使用标准库异常类
12. 3 多重继承与虚继承
12. 3. 1 多重继承
12. 3. 2 虚继承
12. 4 嵌套类
12. 4. 1 二维数组类
12. 4. 2 通用计算器
12. 5 运行时类型识别
12. 5. 1 dynamic_cast 运算符
12. 5. 2 typeid 运算符
12. 6 union 类型
12. 6. 1 定义union 类型
12. 6. 2 使用union 类型
12. 7 标准库特殊工具
12. 7. 1 tuple 类型
12. 7. 2 bitset 类型
12. 7. 3 日期和时间
习题12
附录A ASCII 字符表
附录B 运算符优先级表
附录C 标准库算法
参考文献