从零开始学C++

2022年化学工业出版社出版书籍
《从零开始学C++》是化学工业出版社于2022年出版的书籍，作者是明日科技编著。
内容简介
本书从零基础读者的角度出发，通过通俗易懂的语言、丰富的实例，循序渐进地让读者在实践中学习C++编程知识，并提升自己的实际开发能力。 全书共分为6篇20章，内容包括初识C++、第一个C++程序、数据类型、运算符与表达式、条件判断语句、循环语句、函数、数组、指针与引用、构造数据类型、面向对象编程、类和对象、继承与派生、模板、STL标准模板库、文件操作、RTTI与异常处理、网络通信、图书管理系统、网络五子棋等。书中知识点讲解细致，侧重介绍每个知识点的使用场景，涉及的代码给出了详细的注释，可以使读者轻松领会C++程序开发的精髓，快速提高开发技能。同时，本书配套了大量教学视频，扫码即可观看，还提供相关程序的源文件，方便读者实践。 本书适合C++初学者、软件开发入门者自学使用，也可用作高等院校相关专业的教材及参考书。
图书目录
第1篇　基础知识篇
第1章　初识C++   2	视频讲解：6节，33分钟
1.1　C++发展史   3
1.1.1　20世纪最伟大的发明之一——计算机   3
1.1.2　C++发展历程   3
1.1.3　C++相关的杰出人物   4
1.2　开发环境   5
1.2.1　Visual C++ 6.0的安装   5
1.2.2　Visual C++ 6.0的使用   8
1.3　开发应用程序过程   12
1.4　C++工程项目文件   15
1.5　C++的特点   15
本章知识思维导图   16
第2章　第一个C++程序   17	视频讲解：2节，29分钟
2.1　最简单的C++程序   18
2.2　#include指令   18
2.2.1　#include   18
2.2.2　iostream   19
2.3　注释   19
2.3.1　单行注释   19
2.3.2　多行注释   20
2.4　main函数   20
2.5　函数体   21
2.6　函数返回值   22
本章知识思维导图   22
第3章　数据类型   23	视频讲解：4节，133分钟
3.1　常量及符号   24
3.1.1　整型常量   24
3.1.2　浮点型常量   25
3.1.3　字符常量   25
【实例3.1】　转义字符应用   25
3.1.4　字符串常量   26
3.1.5　其他常量   27
3.2　变量   27
3.2.1　标识符   27
3.2.2　变量与变量说明   28
3.2.3　整型变量   28
3.2.4　浮点型变量   29
3.2.5　变量赋值   29
3.2.6　变量赋初值   29
3.2.7　字符变量   30
【实例3.2】　字符型数据与整型数据间运算   30
【实例3.3】　字符型数据进行算术运算   30
3.3　常用数据类型   31
3.3.1　定义数据类型   32
【实例3.4】　利用浮点数精度进行实数比较   33
3.3.2　字符类型   33
3.3.3　布尔类型   33
3.4　数据输入与输出   34
3.4.1　控制台屏幕   34
3.4.2　C++中的流   34
【实例3.5】　简单输出字符   35
3.4.3　流操作的控制   36
【实例3.6】　控制打印格式程序   36
【实例3.7】　使用printf进行输出   39
本章知识思维导图   40
第4章　运算符与表达式   41	视频讲解：4节，129分钟
4.1　运算符   42
4.1.1　算术运算符   42
4.1.2　关系运算符   43
4.1.3　逻辑运算符   44
【实例4.1】　求逻辑表达式的值   45
4.1.4　赋值运算符   45
4.1.5　位运算符   46
【实例4.2】　位运算符应用   47
4.1.6　移位运算符   48
4.1.7　sizeof运算符   49
4.1.8　条件运算符   50
4.1.9　逗号运算符   50
4.2　结合性和优先级   50
4.3　表达式   51
4.3.1　算术表达式   52
4.3.2　关系表达式   52
4.3.3　条件表达式   52
4.3.4　赋值表达式   52
4.3.5　逻辑表达式   53
4.3.6　逗号表达式   53
【实例4.3】　逗号运算符应用   53
4.3.7　表达式中的类型转换   54
【实例4.4】　隐式类型转换   55
【实例4.5】　强制类型转换应用   56
4.4　判断左值与右值   56
本章知识思维导图   57
第5章　条件判断语句   58	视频讲解：5节，98分钟
5.1　决策分支   59
5.2　判断语句   59
5.2.1　第一种形式的判断语句   59
【实例5.1】　判断输入数是否为奇数   60
5.2.2　第二种形式的判断语句   61
【实例5.2】　根据分数判断是否优秀   61
【实例5.3】　改进的奇偶性判别   62
5.2.3　第三种形式的判断语句   62
【实例5.4】　根据成绩划分等级   63
5.3　使用条件运算符进行判断   64
【实例5.5】　用条件运算符完成判断数的奇偶性   64
【实例5.6】　条件表达式判断一个数是否是3和5的整倍数（1）   65
【实例5.7】　条件表达式判断一个数是否是3和5的整倍数（2）   65
5.4　switch语句   65
【实例5.8】　根据输入的字符输出字符串（1）   66
【实例5.9】　根据输入的字符输出字符串（2）   67
【实例5.10】　根据输入的字符输出字符串（3）   67
5.5　判断语句的嵌套   69
【实例5.11】　判断是否是闰年（1）   69
【实例5.12】　判断是否是闰年（2）   70
本章知识思维导图   71
第6章　循环语句   72	视频讲解：5节，82分钟
6.1　while循环语句   73
【实例6.1】　使用while循环语句计算从1到10的累加   73
6.2　do…while循环语句   74
【实例6.2】　使用do…while循环语句计算1到10的累加   75
6.3　for循环语句   76
【实例6.3】　用for循环语句计算从1到10的累加   76
6.4　循环控制   79
6.4.1　控制循环的变量   79
6.4.2　break语句   80
【实例6.4】　使用break语句跳出循环   80
6.4.3　continue语句   81
【实例6.5】　使用continue语句跳出循环   81
6.5　循环嵌套   81
【实例6.6】　输出乘法口诀表   82
本章知识思维导图   83
第2篇　高级技术篇
第7章　函数   86	视频讲解：7节，203分钟
7.1　函数概述   87
7.1.1　函数的定义   87
7.1.2　函数的声明   87
【实例7.1】　声明、定义和使用函数   87
7.2　函数参数及返回值   88
7.2.1　返回值   88
7.2.2　空函数   89
7.2.3　形参与实参   89
7.2.4　默认参数   90
【实例7.2】　调用默认参数的函数   90
7.2.5　可变参数   91
【实例7.3】　定义省略号形式的函数参数   91
7.3　函数调用   92
7.3.1　传值调用   92
【实例7.4】　使用传值调用   92
7.3.2　嵌套调用   93
7.3.3　递归调用   94
【实例7.5】　汉诺（Hanoi）塔问题   94
【实例7.6】　利用循环求n的阶乘   96
7.4　变量作用域   96
7.5　重载函数   97
【实例7.7】　使用重载函数   97
7.6　内联函数   98
7.7　变量的存储类别   98
7.7.1　auto变量   99
【实例7.8】　输出不同生命期的变量值   99
7.7.2　static变量   100
【实例7.9】　使用static变量实现累加   100
7.7.3　register变量   101
7.7.4　extern变量   101
本章知识思维导图   102
第8章　数组   103	视频讲解：7节，108分钟
8.1　一维数组   104
8.1.1　一维数组的声明   104
8.1.2　一维数组的引用   104
8.1.3　一维数组的初始化   104
【实例8.1】　一维数组赋值   105
8.2　二维数组   106
8.2.1　二维数组的声明   106
8.2.2　二维数组元素的引用   106
8.2.3　二维数组的初始化   107
【实例8.2】　将二维数组行列对换   108
8.3　字符数组   108
【实例8.3】　使用字符串结束符0防止出现非法字符   109
【实例8.4】　输出字符数组中内容   110
8.4　字符串处理函数   111
8.4.1　strcat函数   111
【实例8.5】　连接字符串   111
【实例8.6】　不使用strcat函数连接两个字符串   111
8.4.2　strcpy函数   112
【实例8.7】　字符串复制   112
8.4.3　strcmp函数   113
【实例8.8】　字符串比较   113
8.4.4　strlen函数   114
【实例8.9】　获取字符串长度   114
本章知识思维导图   115
第9章　指针与引用   116	视频讲解：6节，156分钟
9.1　指针   117
9.1.1　变量与指针   117
【实例9.1】　输出变量的地址值   118
9.1.2　指针运算符和取地址运算符   119
【实例9.2】　输出指针对应的数值   119
9.1.3　指针运算   120
【实例9.3】　输出指针运算后地址值   120
9.1.4　指向空的指针与空类型指针   121
【实例9.4】　空类型指针的使用   121
9.1.5　指向常量的指针与指针常量   122
【实例9.5】 指针与const   122
9.2　指针与数组   123
9.2.1　数组的存储   123
9.2.2　指针与一维数组   123
【实例9.6】　通过指针变量获取数组中元素   124
9.2.3　指针与二维数组   125
【实例9.7】　将多维数组转换成一维数组   125
【实例9.8】　使用指针变量遍历二维数组   126
【实例9.9】　使用数组地址将二维数组输出   127
【实例9.10】　数组指针与指针数组   128
9.2.4　指针与字符数组   129
【实例9.11】　通过指针偏移连接两个字符串   129
9.3　指针在函数中的应用   130
9.3.1　传递地址   130
【实例9.12】　调用自定义函数交换两变量值   130
9.3.2　指向函数的指针   131
【实例9.13】　使用指针函数进行平均值计算   132
9.3.3　从函数中返回指针   132
【实例9.14】　指针作返回值   133
9.4　指针数组   133
【实例9.15】　用指针数组中各个元素分别指向若干个字符串   134
9.5　安全使用指针   135
9.5.1　内存分配   135
【实例9.16】　动态分配空间   136
【实例9.17】　主动释放内存空间   136
9.5.2　内存安全   137
【实例9.18】　被销毁的内存   137
【实例9.19】　丢失的内存   138
【实例9.20】　回收动态内存的一般处理步骤   139
9.6　引用   139
9.6.1　引用概述   139
【实例9.21】　输出引用   140
9.6.2　使用引用传递参数   141
【实例9.22】　通过引用交换数值   141
9.6.3　数组作函数参数   142
【实例9.23】　获取命令参数   142
【实例9.24】　输出每行数组中的最小值   142
本章知识思维导图   144
第10章 构造数据类型   145	视频讲解：6节，92分钟
10.1　结构体   146
10.1.1　结构体定义   146
10.1.2　结构体变量   146
10.1.3　结构体成员及初始化   147
【实例10.1】　为结构体成员赋值   147
【实例10.2】　使用结构体指针变量引用结构体成员   148
10.1.4　结构体的嵌套   149
【实例10.3】　使用嵌套的结构体   150
10.1.5　结构体大小   150
10.2　重命名数据类型   151
【实例10.4】　三只小狗   152
10.3　结构体与函数   153
10.3.1　结构体变量作函数参数   153
【实例10.5】　使用结构体变量作函数参数   153
10.3.2　结构体指针变量作函数参数   154
【实例10.6】　使用结构体指针变量作函数参数   154
10.4　结构体数组   155
10.4.1　结构体数组的声明与引用   155
10.4.2　指针访问结构体数组   156
【实例10.7】　使用指针访问结构体数组   156
10.5　共用体   156
10.5.1　共用体的定义与声明   157
10.5.2　共用体的大小   158
【实例10.8】　使用共用体变量   158
10.5.3　共用体类型的特点   158
10.6　枚举类型   159
10.6.1　枚举类型的声明   159
10.6.2　枚举类型变量   160
【实例10.9】　枚举变量的赋值   160
10.6.3　枚举类型的运算   161
【实例10.10】　枚举值的比较运算   161
本章知识思维导图   162
第3篇　面向对象编程篇
第11章 面向对象编程   164	视频讲解：3节，38分钟
11.1　面向对象概述   165
11.2　面向过程编程与面向对象编程   166
11.2.1　面向过程编程   166
11.2.2　面向对象编程   166
11.2.3　面向对象的特点   167
11.3　统一建模语言   167
11.3.1　统一建模语言概述   167
11.3.2　统一建模语言的结构   168
11.3.3　面向对象的建模   170
本章知识思维导图   170
第12章 类和对象   171	视频讲解：6节，197分钟
12.1　C++类   172
12.1.1　类概述   172
12.1.2　类的声明与定义   172
12.1.3　类的实现   173
12.1.4　对象的声明   175
【实例12.1】　对象的引用   176
12.2　构造函数   177
12.2.1　构造函数概述   177
【实例12.2】　使用构造函数进行初始化操作   178
12.2.2　复制构造函数   179
【实例12.3】　使用复制构造函数   179
12.3　析构函数   180
【实例12.4】　使用析构函数   180
12.4　类成员   181
12.4.1　访问类成员   181
12.4.2　内联成员函数   183
12.4.3　静态类成员   184
12.4.4　隐藏的this指针   185
12.4.5　嵌套类   187
12.5　友元   188
12.5.1　友元概述   188
12.5.2　友元类   189
12.5.3　友元方法   190
【实例12.5】　定义友元方法   190
12.6　命名空间   192
12.6.1　使用命名空间   192
12.6.2　定义命名空间   192
【实例12.6】　定义命名空间   193
【实例12.7】　使用“using namespace”语句   194
12.6.3　在多个文件中定义命名空间   194
12.6.4　定义嵌套的命名空间   195
【实例12.8】　定义嵌套的命名空间   196
12.6.5　定义未命名的命名空间   197
本章知识思维导图   198
第13章 继承与派生   199	视频讲解：5节，112分钟
13.1　继承   200
13.1.1　类的继承   200
【实例13.1】　以公有方式继承   200
13.1.2　继承后可访问性   201
13.1.3　构造函数访问顺序   203
【实例13.2】　构造函数访问顺序   203
13.1.4　子类显式调用父类构造函数   204
【实例13.3】　子类显式调用父类的构造函数   204
13.1.5　子类隐藏父类的成员函数   205
【实例13.4】　子类隐藏父类的成员函数   206
13.2　重载运算符   207
13.2.1　重载运算符的必要性   207
13.2.2　重载运算符的形式与规则   208
【实例13.5】　通过重载运算符实现求和   209
13.2.3　重载运算符的运算   209
13.2.4　转换运算符   211
【实例13.6】　转换运算符   212
13.3　多重继承   212
13.3.1　多重继承定义   212
13.3.2　二义性   214
13.3.3　多重继承的构造顺序   214
【实例13.7】　多重继承的构造顺序   214
13.4　多态   215
13.4.1　虚函数概述   216
13.4.2　利用虚函数实现动态绑定   216
【实例13.8】　利用虚函数实现动态绑定   216
13.4.3　虚继承   217
【实例13.9】　虚继承   217
13.5　抽象类   219
【实例13.10】　创建纯虚函数   219
本章知识思维导图   221
第4篇　模板及文件篇
第14章 模板   224	视频讲解：3节，20分钟
14.1　函数模板   225
14.1.1　函数模板的定义   225
14.1.2　函数模板的作用   226
【实例14.1】　使用数组作为模板参数   226
14.1.3　重载函数模板   227
【实例14.2】　求出字符串的最小值   227
14.2　类模板   228
14.2.1　类模板的定义与声明   228
14.2.2　简单类模板   230
14.2.3　默认模板参数   230
14.2.4　为具体类型的参数提供默认值   231
14.2.5　有界数组模板   231
【实例14.3】　数组模板的应用   232
14.3　模板的使用   233
14.3.1　定制类模板   233
14.3.2　定制类模板成员函数   235
本章知识思维导图   236
第15章 STL标准模板库   237	视频讲解：3节，30分钟
15.1　序列容器   238
15.1.1　对比容器适配器与容器   238
15.1.2　对比迭代器与容器   238
15.1.3　向量类模板   239
【实例15.1】　vector模板类的操作方法   240
15.1.4　双端队列类模板   242
【实例15.2】　双端队列类模板的应用   243
15.1.5　链表类模板   244
【实例15.3】　迭代器的应用   245
15.2　结合容器   246
15.2.1　set类模板   246
【实例15.4】　创建整型类集合，并插入数据   247
【实例15.5】　创建整型类集合，并删除集合中的元素   248
【实例15.6】　通过指定的字符在集合中查找元素   248
15.2.2　multiset类模板   250
15.2.3　map类模板   253
15.2.4　multimap类模板   255
15.3　迭代器   256
15.3.1　输出迭代器   256
【实例15.7】　应用输出迭代器   256
15.3.2　输入迭代器   256
15.3.3　前向迭代器   257
15.3.4　双向迭代器   257
15.3.5　随机访问迭代器   258
本章知识思维导图   259
第16章 文件操作   260	视频讲解：6节，35分钟
16.1　流简介   261
16.1.1　C++中的流类库   261
16.1.2　类库的使用   261
16.1.3　ios类中的枚举常量   262
16.1.4　流的输入/输出   262
【实例16.1】　字符相加并输出   262
16.2　文件打开   263
16.2.1　打开方式   263
16.2.2　默认打开模式   264
16.2.3　打开文件同时创建文件   264
【实例16.2】　创建文件   264
16.3　文件的读写   265
16.3.1　文件流   265
【实例16.3】　读写文件   266
16.3.2　写文本文件   267
【实例16.4】　向文本文件写入数据   267
16.3.3　读取文本文件   268
【实例16.5】　读取文本文件内容   268
16.3.4　二进制文件的读写   268
【实例16.6】　使用read读取文件   268
16.3.5　实现文件复制   269
16.4　文件指针移动操作   270
16.4.1　文件错误与状态   270
16.4.2　文件的追加   271
16.4.3　文件结尾的判断   272
【实例16.7】　判断文件结尾   272
16.4.4　在指定位置读写文件   273
16.5　文件和流的关联和分离   274
16.6　删除文件   275
本章知识思维导图   276
第5篇　异常处理及网络篇
第17章 RTTI与异常处理   278	视频讲解：2节，18分钟
17.1　RTTI   279
17.1.1　RTTI的定义   279
17.1.2　RTTI与引用   280
17.1.3　RTTI与多重继承   281
17.1.4　RTTI映射语法   281
17.2　异常处理   283
17.2.1　抛出异常   283
17.2.2　异常捕获   285
17.2.3　异常匹配   287
17.2.4　标准异常   288
本章知识思维导图   289
第18章 网络通信   290	视频讲解：3节，20分钟
18.1　TCP/IP   291
18.1.1　OSI参考模型   291
18.1.2　TCP/IP参考模型   291
18.1.3　IP地址   292
18.1.4　数据包格式   292
18.2　套接字   294
18.2.1　Winsock套接字   294
18.2.2　Winsock的使用   295
18.2.3　套接字阻塞模式   300
18.2.4　字节顺序   300
18.2.5　面向连接流   300
18.2.6　面向无连接流   301
18.3　简单协议通信   301
18.3.1　服务端   302
【实例18.1】　服务器   302
18.3.2　客户端   304
【实例18.2】　客户端   304
18.3.3　实例的运行   304
本章知识思维导图   305
第19章 图书管理系统   308	视频讲解：7节，44分钟
19.1　开发背景   309
19.2　需求分析   309
19.3　系统设计   309
19.3.1　系统目标   309
19.3.2　系统功能结构   309
19.3.3　系统预览   310
19.3.4　业务流程图   310
19.4　公共类设计   311
19.5　主窗体模块设计   314
19.5.1　主窗体模块概述   314
19.5.2　主窗体模块技术分析   314
19.5.3　主窗体模块实现过程   315
19.6　添加新书模块设计   317
19.6.1　添加新书模块概述   317
19.6.2　添加新书模块技术分析   317
19.6.3　添加新书模块实现过程   317
19.7　浏览全部模块设计   318
19.7.1　浏览全部模块概述   318
19.7.2　浏览全部模块技术分析   318
19.7.3　浏览全部模块实现过程   318
19.8　删除图书模块设计   319
19.8.1　删除图书模块概述   319
19.8.2　删除图书模块技术分析   319
19.8.3　删除图书模块实现过程   319
19.9　实现全部模块   320
本章知识思维导图   320
第20章 网络五子棋   321	视频讲解：7节，35分钟
20.1　开发背景   322
20.2　需求分析   322
20.3　系统设计   322
20.3.1　系统功能结构   322
20.3.2　系统预览   322
20.4　关键技术分析与实现   323
20.4.1　使用TCP进行网络通信   323
20.4.2　定义网络通信协议   325
20.4.3　实现动态调整棋盘大小   326
20.4.4　在棋盘中绘制棋子   327
20.4.5　五子棋赢棋判断   329
20.4.6　设计游戏悔棋功能   332
20.4.7　设计游戏回放功能   334
20.4.8　对方网络状态测试   337
20.5　服务器端主窗体设计   339
20.5.1　服务器端主窗体概述   339
20.5.2　服务器端主窗体实现过程   339
20.6　棋盘窗体模块设计   341
20.6.1　棋盘窗体模块概述   341
20.6.2　棋盘窗体模块界面布局   341
20.6.3　棋盘窗体模块实现过程   342
20.7　游戏控制窗体模块设计   348
20.7.1　游戏控制窗体模块概述   348
20.7.2　游戏控制窗体模块界面布局   348
20.7.3　游戏控制窗体模块实现过程   349
20.8　对方信息窗体模块设计   351
20.8.1　对方信息窗体模块概述   351
20.8.2　对方信息窗体模块界面布局   351
20.8.3　对方信息窗体模块实现过程   351
20.9　客户端主窗体模块设计   352
20.9.1　客户端主窗体模块概述   352
20.9.2　客户端主窗体模块实现过程   353
本章知识思维导图   355