C++17从入门到精通
作者:董洪伟编著
出版时间: 2019年版
内容简介
本书以简明扼要的语言、配合丰富的实例,针对初学者从*基础的变量、表达式、数组、指针、引用和函数等,到面向对象的类和对象、继承与派生、虚函数与多态,从泛型编程的函数模板和类模板到移动语义、头等函数(函数指针、函数对象、Lambda表达式),从C 标准库的输入输出流库、容器、迭代器、算法、智能指针等工具到异常处理和RAII等,由浅入深地对*的C 17标准语法进行了系统的讲解。对一些关键的语法概念如函数、类与对象、派生类等内容,提供了游戏编程、信息管理、数据结构、机器学习、人工智能等学科领域的一些经典的、实际问题的实战演练,以加强读者将语法知识用于解决各种实际问题和进行实际编程能力的训练,让读者领悟和体会C 语言的灵活运用。 本书描述精炼、简单易懂,并有丰富的实战案例,既适合作为编程初学者的学习用书,也适合有编程基础的开发人员迅速学习和掌握现代C 语言。
目 录
目录
第1章 C 介绍
1.1程序与编程语言
1.1.1计算机是什么
1.1.2计算机编程
1.1.3编译器、解释器和C 语言
1.1.4C 语言介绍
1.1.5C 程序开发步骤
1.2C 程序结构
1.2.1简单的C 程序
1.2.2函数
1.2.3语句
1.2.4程序注释
1.2.5hello world程序
1.2.6标准输入输出库和cout
1.2.7名字空间
1.2.8字符串和字符
1.2.9运算符和运算数
1.2.10宏定义#define
1.2.11变量
1.2.12标准输入流对象cin
1.2.13用户定义类型
1.3数和字符的表示
1.3.1数的表示
1.3.2字符的表示
1.4编译、执行C 程序
1.5习题
第2章变量和类型
2.1变量
2.1.1变量的定义及初始化
2.1.2auto
2.1.3typeid运算符
2.1.4decltype
2.1.5赋值运算符=
2.1.6const
2.1.7标识符、关键字、文字量
2.2数据类型
2.2.1基本类型
2.2.2sizeof运算符
2.2.3文字量
2.2.4格式化输出
2.2.5类型转换
2.2.6类型别名
2.2.7枚举
2.3局部变量与全局变量、变量的作用域与生命期
2.3.1程序块、局部变量和全局变量
2.3.2作用域和生命期
2.4习题
第3章运算符与表达式
3.1运算符
3.1.1运算符的分类
3.1.2优先级和结合性
3.2表达式
3.3算术运算符
3.3.1算术运算符需要注意的几个问题
3.3.2自增 和自减--
3.3.3数学计算函数库cmath
3.4位运算
3.5赋值运算符
3.6关系运算符
3.7逻辑运算符
3.8特殊运算符
3.8.1条件运算符
3.8.2逗号运算符
3.9习题
第4章语句
4.1简单语句、复合语句和控制语句
4.1.1简单语句
4.1.2复合语句
4.1.3控制语句
4.2条件语句
4.2.1if语句
4.2.2switch语句
4.2.3if/switch语句中的初始化语句
4.3循环语句
4.3.1while语句
4.3.2for语句
4.4跳转语句
4.5实战: 控制台游戏——Pong游戏
4.5.1Pong游戏
4.5.2初始化
4.5.3绘制场景
4.5.4让球动起来
4.5.5事件处理: 用挡板击打球
4.6习题
第5章复合类型: 数组、指针和引用
5.1引用
5.2指针
5.2.1指针类型
5.2.2指针的其他运算
5.2.3void*无类型指针
5.2.4指针的指针
5.2.5指针的引用
5.2.6引用和指针的比较
5.3数组
5.3.1数组和下标运算符
5.3.2复杂的数组声明
5.3.3C风格字符串
5.3.4指针访问数组
5.3.5range for
5.3.6多维数组
5.4动态内存
5.4.1程序堆栈区
5.4.2new和delete运算符
5.4.3动态内存表示多维数组
5.5const修饰符
5.5.1const和指针
5.5.2const对象的引用
5.6实战:查找、排序、短路径
5.6.1二分查找
5.6.2排序: 冒泡、选择
5.6.3Floyd短路径算法
5.7习题
第6章函数
6.1函数是命名的程序块
6.1.1公约数
6.1.2函数的定义
6.2静态变量
6.3函数的形参
6.3.1参数传递
6.3.2默认参数
6.3.3数组作为形参
6.3.4const与形参
6.3.5可变数目的形参
6.4递归函数: 调用自身的函数
6.4.1递归和递归函数
6.4.2实战: 二分查找的递归实现
6.4.3实战: 汉诺塔问题
6.4.4实战: 快速排序算法
6.4.5实战: 迷宫问题
6.5函数重载与重载解析
6.5.1函数重载
6.5.2重载解析
6.5.3const对象的引用或指针
6.6inline函数
6.7constexpr
6.8实战: 二维字符图形库ChGL
6.8.1如何在字符终端上绘图
6.8.2字符图形库ChGL
6.8.3曲线绘制API函数plot()
6.9实战: 基于ChGL的控制台游戏
6.9.1游戏程序的框架
6.9.2用ChGL和函数重写Pong游戏
6.10实战: 机器学习线性回归
6.10.1机器学习
6.10.2假设函数、回归和分类
6.10.3线性回归
6.10.4多变量函数的小值、正规方程
6.10.5梯度下降法
6.10.6梯度下降法求解线性回归问题: 模拟数据
6.10.7批梯度下降法
6.10.8房屋价格预测
6.10.9样本特征的规范化
6.10.10预测房屋价格
6.11习题
第7章类和对象
7.1面向对象编程
7.2类
7.2.1定义一个类
7.2.2定义类的对象(变量)
7.2.3成员函数
7.2.4this指针
7.2.5类对象的大小
7.3构造函数
7.3.1创建类对象的构造函数
7.3.2初始化成员列表
7.3.3拷贝构造函数
7.3.4赋值运算符: operator=
7.3.5隐式类型转换、explicit
7.3.6委托构造函数
7.3.7delete
7.3.8类对象数组
7.3.9类体外定义成员函数和构造函数
7.4访问控制和接口
7.5const对象、const成员函数、mutable成员变量
7.5.1const对象和const成员函数
7.5.2重载const
7.5.3mutable成员变量
7.6析构函数
7.7静态成员
7.7.1非静态成员变量和静态成员变量
7.7.2静态常量
7.7.3静态成员函数
7.7.4类自身类型的静态成员变量
7.8友元
7.9内联成员函数
7.10重新定义拷贝构造函数和赋值运算符函数
7.11实战: 线性表及应用
7.11.1线性表
7.11.2线性表的顺序实现: 顺序表
7.11.3线性表的链式实现: 链表
7.11.4实现一个图书管理的程序
7.12实战: 面向对象游戏——基于链表的贪吃蛇游戏
7.12.1面向对象游戏引擎
7.12.2贪吃蛇游戏
7.13习题
第8章运算符重载
8.1运算符重载的2种方式
8.2赋值运算符=
8.3下标运算符[]
8.4输入输出运算符
8.5比较运算符
8.6函数调用运算符()
8.7类型转换运算符
8.8自增和自减运算符
8.9可以重载的运算符
8.10实战: 矩阵
8.11习题
第9章派生类
9.1继承与派生
9.1.1继承关系和派生类
9.1.2is a和belong to
9.1.3派生类的定义
9.1.4成员的隐藏
9.1.5继承方式
9.1.6基类指针和派生类指针
9.2派生类的构造函数和析构函数
9.3多继承和虚基类
9.3.1多继承
9.3.2虚基类
9.4多态
9.4.1对象的切割和类型转换
9.4.2基类指针(引用)和向下类型转换
9.4.3虚函数和多态
9.4.4虚函数的一些语法规则
9.4.5基类指针数组
9.4.6虚析构函数
9.4.7纯虚函数和抽象类
9.5实战: 仿“雷电战机”游戏
9.5.1精灵
9.5.2游戏引擎GameEngine
9.5.3碰撞检测和精灵的销毁
9.5.4让敌方战机运动和发射子弹
9.6习题
第10章模板
10.1函数模板
10.1.1函数模板的定义与实例化
10.1.2模板参数推断
10.1.3模板专门化
10.1.4函数模板和重载
10.1.5模板的返回类型推断
10.1.6非类型模板参数
10.1.7模板模板参数
10.1.8模板参数的默认值
10.1.9可变模板参数
10.1.10constexpr if
10.2类模板
10.2.1标准库类模板vector
10.2.2类模板Vector
10.2.3定义类模板的成员函数
10.2.4类模板的模板参数推断
10.2.5类模板的专门化
10.2.6类模板的友元
10.2.7类模板std∷initializer_list
10.3实战: 强化学习QLearning求解路径
10.3.1强化学习
10.3.2QLearning
10.3.3QLearning的C 实现
10.4习题
第11章移动语义
11.1左值和右值
11.1.1左值和右值概述
11.1.2左值和右值的转换
11.1.3左值引用和右值引用
11.2移动
11.2.1复制和移动
11.2.2移动构造函数
11.2.3移动赋值运算符函数
11.2.4std∷move
11.2.5右值引用
11.2.6push_back()
11.3习题
第12章函数指针、函数对象、Lambda表达式
12.1函数指针
12.1.1函数类型和函数指针类型
12.1.2给函数指针类型起别名
12.1.3函数指针作为其他函数的参数
12.2函数对象
12.3Lambda表达式
12.3.1定义和使用Lambda表达式
12.3.2捕获子句
12.3.3返回类型
12.3.4Lambda表达式的实质
12.4std∷function
12.5std∷bind
12.6习题
第13章C 标准库介绍
13.1输入输出流库
13.1.1C 的I/O流库
13.1.2格式化输入输出
13.1.3非格式化输入输出
13.1.4文件位置
13.1.5流状态
13.1.6管理输出缓冲区
13.1.7文件输入输出
13.1.8字符串流
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.4算法
13.4.1自定义通用算法
13.4.2策略参数
13.4.3标准库的常用算法
13.5智能指针
13.5.1raw指针和智能指针
13.5.2unique_ptr
13.5.3shared_ptr
13.5.4weak_ptr
13.6字符串
13.6.1字符: cctype、cwctype
13.6.2C风格字符串
13.6.3C 的字符串
13.7习题
第14章异常处理
14.1错误和异常处理
14.1.1错误的分类
14.1.2传统的错误处理方法
14.1.3C 的异常处理
14.2throw、try、catch
14.2.1throw
14.2.2try、catch
14.2.3异常类型的匹配
14.3堆栈展开和RAII
14.3.1堆栈展开
14.3.2资源获取即初始化
14.4习题
参考文献