C++程序设计教程 第4版 / 高等学校计算机专业系列教材
定价:¥79.00
作者: 朱玉莲,刘绍翰,王珊珊,张定会等
出版时间:2026-03-06
出版社:机械工业出版社
- 机械工业出版社
- 9787111801702
- 4-1
- 2026-03-06
- 547
内容简介
本书内容总体上分为三大部分。第一部分涵盖第1~9章,以C++语言的基础语法为切入点,系统讲解面向过程的程序设计,内容包括基本数据类型、流程控制结构、数组、指针、函数、编译预处理以及结构体、枚举类型和链表等核心知识点。第二部分为第10~13章,通过C++语言的应用实例,探讨面向对象程序设计的基本概念,如类与对象、继承与派生、多态以及模板等。第三部分为第14~16章,聚焦于C++语言的高级应用,其中第14章通过实例展示如何利用标准模板库(STL)简化代码并提升性能,第15章和第16章则聚焦于C++在人工智能领域的应用优势及深度学习算法的实现。
本书通俗易懂,适用于大学本科理工类各专业的学生,也适用于自学C++语言的读者。
本书通俗易懂,适用于大学本科理工类各专业的学生,也适用于自学C++语言的读者。
目录
目 录
前言
教学建议
第1章 C++语言概述 1
1.1 计算机程序设计语言简介 1
1.1.1 机器语言 1
1.1.2 汇编语言 1
1.1.3 高级程序设计语言 2
1.2 C++语言的特点和发展 2
1.3 C++程序的基本结构 3
1.3.1 注释语句 3
1.3.2 标准库模块 4
1.3.3 命名空间 4
1.3.4 main()函数 4
1.3.5 关键字和标识符 5
1.3.6 程序的执行过程 6
1.4 编写第一个C++程序 6
第2章 数据类型和运算符 9
2.1 C++基本数据类型 9
2.1.1 字符型 9
2.1.2 整型 10
2.1.3 实数型 11
2.1.4 布尔型 11
2.2 常量和变量 11
2.2.1 常量 11
2.2.2 变量 14
2.3 运算符 17
2.3.1 算术运算符 18
2.3.2 自增和自减运算符 18
2.3.3 关系运算符 19
2.3.4 逻辑运算符 20
2.3.5 赋值运算符 22
2.3.6 逗号运算符 23
2.4 数据类型转换 24
2.4.1 隐式转换 24
2.4.2 显式转换 26
第3章 C++基本输入/输出 28
3.1 标准输入/输出 28
3.1.1 流对象cout的使用 28
3.1.2 流对象cin的使用 31
3.2 文件输入/输出 35
第4章 流程控制结构 39
4.1 项目引入—猜数字游戏 39
4.1.1 猜数字游戏中的结构化程序设计
应用 39
4.1.2 猜数字游戏中的三种基本结构 39
4.1.3 结构化程序设计的基本语句 40
4.2 选择结构 41
4.2.1 单分支的if语句 41
4.2.2 双分支的if-else语句 42
4.2.3 if-else语句的嵌套 43
4.2.4 条件运算符 45
4.2.5 带初始表达式的if-else语句 46
4.2.6 switch语句 47
4.3 循环结构 51
4.3.1 while循环语句 51
4.3.2 for循环语句 53
4.3.3 do-while循环语句 56
4.3.4 基于范围的for循环 57
4.3.5 循环的嵌套 58
4.3.6 break语句 60
4.3.7 continue语句 62
第5章 数组 66
5.1 项目引入—学生成绩管理系统 66
5.2 一维数组 66
5.2.1 一维数组的定义 67
5.2.2 一维数组的初始化 69
5.2.3 一维数组的应用 70
5.3 二维数组 77
5.3.1 二维数组的定义 77
5.3.2 二维数组的初始化 78
5.3.3 二维数组的应用 78
5.4 字符串 80
5.4.1 C风格的字符串 80
5.4.2 string类型字符串 81
5.4.3 string的应用举例 83
第6章 指针 87
6.1 指针与指针变量 87
6.2 指针的运算 88
6.2.1 &和*运算符 88
6.2.2 指针的赋值 89
6.2.3 指针用法初探 89
6.2.4 指针的加减运算和关系运算 92
6.3 用指针处理一维数组 93
6.3.1 用指针处理数值型数组 93
6.3.2 用指针处理字符数组和字符串 95
6.4 动态内存分配 97
6.4.1 简单变量空间的申请和释放 98
6.4.2 动态数组空间的申请和释放 99
6.4.3 深拷贝与浅拷贝 100
6.5 一些特殊指针 101
6.5.1 指针与string 101
6.5.2 指针数组 102
6.5.3 指向常量的指针和指针常量 104
6.5.4 void类型的指针 106
第7章 函数 107
7.1 函数的定义 108
7.2 函数的调用与原型声明 110
7.2.1 函数的调用 110
7.2.2 函数的参数传递机制 112
7.2.3 函数原型声明 118
7.3 函数与一些复杂类型参数 119
7.3.1 函数与指针型参数 119
7.3.2 函数与数组型参数 122
7.3.3 函数与string型参数 133
7.4 嵌套调用和递归调用 135
7.4.1 嵌套调用 135
7.4.2 递归调用 136
7.5 作用域和生存期 138
7.5.1 作用域 138
7.5.2 局部变量与全局变量 140
7.5.3 变量的生存期 141
7.6 函数的其他机制 143
7.6.1 形参默认值 143
7.6.2 函数的重载 145
7.6.3 内联函数 148
7.6.4 函数返回多值的方法总结 148
第8章 编译预处理 150
8.1 #include命令 150
8.2 #define和#undef命令 150
8.2.1 不带参数的宏 150
8.2.2 带参数的宏 151
8.2.3 #undef命令 151
8.3 条件编译命令 152
第9章 结构体、枚举类型和链表 154
9.1 结构体 154
9.1.1 结构体类型的定义 154
9.1.2 结构体变量的定义 155
9.1.3 结构体变量的使用 156
9.1.4 结构体数组 158
9.2 枚举类型 159
9.2.1 枚举类型的定义 159
9.2.2 枚举变量的定义 159
9.3 链表 160
9.3.1 链表的定义 160
9.3.2 返回指针的函数 162
9.3.3 不带头结点的单链表及其常用
算法 162
9.3.4 带头结点的单链表及其常用
算法 169
第10章 类和对象 174
10.1 类和对象的定义 174
10.1.1 面向对象编程 174
10.1.2 封装和数据隐藏 174
10.1.3 定义类 175
10.1.4 关于数据成员和成员函数的
说明 177
10.1.5 对象的定义及存储空间 178
10.2 初始化和撤销对象 181
10.2.1 构造函数 182
10.2.2 拷贝构造函数 186
10.2.3 析构函数 189
10.2.4 利用构造函数进行类型转换 197
10.2.5 对象成员的构造和析构调用
顺序 199
10.3 成员函数的其他情况 202
10.3.1 内联函数和外联函数 202
10.3.2 成员函数重载 202
10.3.3 this指针 203
10.4 静态成员 205
10.4.1 静态数据成员 205
10.4.2 静态成员函数 207
10.4.3 类自身类型的静态成员变量 208
10.5 友元 209
10.5.1 友元函数 209
10.5.2 友元成员函数 210
10.5.3 友元类 211
第11章 继承与派生 213
11.1 继承关系和派生类的概念 213
11.2 单一继承 214
11.2.1 公有继承 215
11.2.2 保护继承 217
11.2.3 私有继承 218
11.2.4 继承下的构造函数 219
11.2.5 继承下的拷贝构造函数 220
11.3 多重继承 222
11.3.1 多重继承的定义方法 222
11.3.2 多重继承下的构造和析构顺序 223
11.3.3 对象成员与基类的构造及析构
顺序 226
11.3.4 二义性问题 229
11.3.5 同名覆盖问题 231
第12章 多态 233
12.1 函数重载 233
12.2 运算符重载 234
12.2.1 运算符重载概念 234
12.2.2 运算符重载的两种方式 236
12.2.3 赋值运算符和复合赋值运算符
重载 239
12.2.4 其他运算符重载 243
12.2.5 运算符重载综合举例 253
12.2.6 运算符重载函数小结 257
12.3 静态联编 257
12.3.1 对象的赋值兼容和类型转换 257
12.3.2 普通函数的静态联编 259
12.3.3 类成员函数的静态联编 260
12.4 动态联编和虚函数 261
12.4.1 虚函数的定义和使用 262
12.4.2 虚析构函数 267
12.4.3 纯虚函数和抽象类 269
第13章 模板 272
13.1 函数模板 272
13.1.1 函数模板的定义和使用 273
13.1.2 函数模板和重载 279
13.1.3 函数模板特化 280
13.1.4 可变模板参数 283
13.1.5 函数模板小结 286
13.2 类模板 288
13.2.1 类模板的定义和使用 288
13.2.2 非类型模板参数 291
13.2.3 类模板的特化 292
13.2.4 类模板和友元 295
13.3 本章小结 296
第14章 标准模板库(STL) 297
14.1 STL概述 297
14.2 容器 297
14.2.1 容器的分类 297
14.2.2 顺序容器之array 298
14.2.3 顺序容器之vector 301
14.2.4 顺序容器之list 305
14.2.5 其他顺序容器 309
14.2.6 关联容器之map和multimap 311
14.2.7 关联容器之set 316
14.3 迭代器 317
14.3.1 迭代器简介 317
14.3.2 迭代器的分类 318
14.3.3 迭代器的使用 319
14.4 STL算法 322
14.4.1 STL算法简介 322
14.4.2 STL算法的分类 323
14.4.3 STL算法总结 328
第15章 人工智能基础 329
15.1 从生物神经元到感知器 329
15.1.1 生物神经元 329
15.1.2 感知器 329
15.1.3 多层感知器 331
15.2 模型训练算法 334
15.2.1 模型训练的过程 334
15.2.2 前向传播 337
15.2.3 损失函数 337
15.2.4 梯度下降算法更新权重 337
15.2.5 误差反向传播学习 338
第16章 C++语言在深度学习中的
应用 343
16.1 C++语言的优势 343
16.1.1 性能优势 343
16.1.2 资源效率优势 343
16.1.3 在工业级应用中的不可
替代性 344
16.1.4 在人工智能领域的运用
与趋势 344
16.2 C++在AI应用中的优势 345
16.2.1 C++比Python更快的原因 345
16.2.2 矩阵运算效率对比 346
16.2.3 计算机视觉处理性能 346
16.2.4 神经网络推理优化 347
16.2.5 排序算法实现的差异 348
16.3 面向GPU的C++编程 349
16.3.1 CUDA C++:GPU并行计算的
核心技术 350
16.3.2 CUDA C++核函数 351
16.3.3 CUDA C++主函数与初始化 352
16.3.4 CUDA C++设备内存管理 353
16.3.5 CUDA C++数据传输 354
16.3.6 CUDA C++核函数调用 354
16.3.7 CUDA C++结果回传与资源
释放 355
16.3.8 CUDA C++编程结构化模式 356
16.4 C++在深度学习框架底层设计中的
应用 356
16.4.1 C++在TensorFlow框架中的
作用 356
16.4.2 C++在PyTorch框架中的
作用 358
16.4.3 C++在深度学习框架中的混合
编程 360
前言
教学建议
第1章 C++语言概述 1
1.1 计算机程序设计语言简介 1
1.1.1 机器语言 1
1.1.2 汇编语言 1
1.1.3 高级程序设计语言 2
1.2 C++语言的特点和发展 2
1.3 C++程序的基本结构 3
1.3.1 注释语句 3
1.3.2 标准库模块 4
1.3.3 命名空间 4
1.3.4 main()函数 4
1.3.5 关键字和标识符 5
1.3.6 程序的执行过程 6
1.4 编写第一个C++程序 6
第2章 数据类型和运算符 9
2.1 C++基本数据类型 9
2.1.1 字符型 9
2.1.2 整型 10
2.1.3 实数型 11
2.1.4 布尔型 11
2.2 常量和变量 11
2.2.1 常量 11
2.2.2 变量 14
2.3 运算符 17
2.3.1 算术运算符 18
2.3.2 自增和自减运算符 18
2.3.3 关系运算符 19
2.3.4 逻辑运算符 20
2.3.5 赋值运算符 22
2.3.6 逗号运算符 23
2.4 数据类型转换 24
2.4.1 隐式转换 24
2.4.2 显式转换 26
第3章 C++基本输入/输出 28
3.1 标准输入/输出 28
3.1.1 流对象cout的使用 28
3.1.2 流对象cin的使用 31
3.2 文件输入/输出 35
第4章 流程控制结构 39
4.1 项目引入—猜数字游戏 39
4.1.1 猜数字游戏中的结构化程序设计
应用 39
4.1.2 猜数字游戏中的三种基本结构 39
4.1.3 结构化程序设计的基本语句 40
4.2 选择结构 41
4.2.1 单分支的if语句 41
4.2.2 双分支的if-else语句 42
4.2.3 if-else语句的嵌套 43
4.2.4 条件运算符 45
4.2.5 带初始表达式的if-else语句 46
4.2.6 switch语句 47
4.3 循环结构 51
4.3.1 while循环语句 51
4.3.2 for循环语句 53
4.3.3 do-while循环语句 56
4.3.4 基于范围的for循环 57
4.3.5 循环的嵌套 58
4.3.6 break语句 60
4.3.7 continue语句 62
第5章 数组 66
5.1 项目引入—学生成绩管理系统 66
5.2 一维数组 66
5.2.1 一维数组的定义 67
5.2.2 一维数组的初始化 69
5.2.3 一维数组的应用 70
5.3 二维数组 77
5.3.1 二维数组的定义 77
5.3.2 二维数组的初始化 78
5.3.3 二维数组的应用 78
5.4 字符串 80
5.4.1 C风格的字符串 80
5.4.2 string类型字符串 81
5.4.3 string的应用举例 83
第6章 指针 87
6.1 指针与指针变量 87
6.2 指针的运算 88
6.2.1 &和*运算符 88
6.2.2 指针的赋值 89
6.2.3 指针用法初探 89
6.2.4 指针的加减运算和关系运算 92
6.3 用指针处理一维数组 93
6.3.1 用指针处理数值型数组 93
6.3.2 用指针处理字符数组和字符串 95
6.4 动态内存分配 97
6.4.1 简单变量空间的申请和释放 98
6.4.2 动态数组空间的申请和释放 99
6.4.3 深拷贝与浅拷贝 100
6.5 一些特殊指针 101
6.5.1 指针与string 101
6.5.2 指针数组 102
6.5.3 指向常量的指针和指针常量 104
6.5.4 void类型的指针 106
第7章 函数 107
7.1 函数的定义 108
7.2 函数的调用与原型声明 110
7.2.1 函数的调用 110
7.2.2 函数的参数传递机制 112
7.2.3 函数原型声明 118
7.3 函数与一些复杂类型参数 119
7.3.1 函数与指针型参数 119
7.3.2 函数与数组型参数 122
7.3.3 函数与string型参数 133
7.4 嵌套调用和递归调用 135
7.4.1 嵌套调用 135
7.4.2 递归调用 136
7.5 作用域和生存期 138
7.5.1 作用域 138
7.5.2 局部变量与全局变量 140
7.5.3 变量的生存期 141
7.6 函数的其他机制 143
7.6.1 形参默认值 143
7.6.2 函数的重载 145
7.6.3 内联函数 148
7.6.4 函数返回多值的方法总结 148
第8章 编译预处理 150
8.1 #include命令 150
8.2 #define和#undef命令 150
8.2.1 不带参数的宏 150
8.2.2 带参数的宏 151
8.2.3 #undef命令 151
8.3 条件编译命令 152
第9章 结构体、枚举类型和链表 154
9.1 结构体 154
9.1.1 结构体类型的定义 154
9.1.2 结构体变量的定义 155
9.1.3 结构体变量的使用 156
9.1.4 结构体数组 158
9.2 枚举类型 159
9.2.1 枚举类型的定义 159
9.2.2 枚举变量的定义 159
9.3 链表 160
9.3.1 链表的定义 160
9.3.2 返回指针的函数 162
9.3.3 不带头结点的单链表及其常用
算法 162
9.3.4 带头结点的单链表及其常用
算法 169
第10章 类和对象 174
10.1 类和对象的定义 174
10.1.1 面向对象编程 174
10.1.2 封装和数据隐藏 174
10.1.3 定义类 175
10.1.4 关于数据成员和成员函数的
说明 177
10.1.5 对象的定义及存储空间 178
10.2 初始化和撤销对象 181
10.2.1 构造函数 182
10.2.2 拷贝构造函数 186
10.2.3 析构函数 189
10.2.4 利用构造函数进行类型转换 197
10.2.5 对象成员的构造和析构调用
顺序 199
10.3 成员函数的其他情况 202
10.3.1 内联函数和外联函数 202
10.3.2 成员函数重载 202
10.3.3 this指针 203
10.4 静态成员 205
10.4.1 静态数据成员 205
10.4.2 静态成员函数 207
10.4.3 类自身类型的静态成员变量 208
10.5 友元 209
10.5.1 友元函数 209
10.5.2 友元成员函数 210
10.5.3 友元类 211
第11章 继承与派生 213
11.1 继承关系和派生类的概念 213
11.2 单一继承 214
11.2.1 公有继承 215
11.2.2 保护继承 217
11.2.3 私有继承 218
11.2.4 继承下的构造函数 219
11.2.5 继承下的拷贝构造函数 220
11.3 多重继承 222
11.3.1 多重继承的定义方法 222
11.3.2 多重继承下的构造和析构顺序 223
11.3.3 对象成员与基类的构造及析构
顺序 226
11.3.4 二义性问题 229
11.3.5 同名覆盖问题 231
第12章 多态 233
12.1 函数重载 233
12.2 运算符重载 234
12.2.1 运算符重载概念 234
12.2.2 运算符重载的两种方式 236
12.2.3 赋值运算符和复合赋值运算符
重载 239
12.2.4 其他运算符重载 243
12.2.5 运算符重载综合举例 253
12.2.6 运算符重载函数小结 257
12.3 静态联编 257
12.3.1 对象的赋值兼容和类型转换 257
12.3.2 普通函数的静态联编 259
12.3.3 类成员函数的静态联编 260
12.4 动态联编和虚函数 261
12.4.1 虚函数的定义和使用 262
12.4.2 虚析构函数 267
12.4.3 纯虚函数和抽象类 269
第13章 模板 272
13.1 函数模板 272
13.1.1 函数模板的定义和使用 273
13.1.2 函数模板和重载 279
13.1.3 函数模板特化 280
13.1.4 可变模板参数 283
13.1.5 函数模板小结 286
13.2 类模板 288
13.2.1 类模板的定义和使用 288
13.2.2 非类型模板参数 291
13.2.3 类模板的特化 292
13.2.4 类模板和友元 295
13.3 本章小结 296
第14章 标准模板库(STL) 297
14.1 STL概述 297
14.2 容器 297
14.2.1 容器的分类 297
14.2.2 顺序容器之array 298
14.2.3 顺序容器之vector 301
14.2.4 顺序容器之list 305
14.2.5 其他顺序容器 309
14.2.6 关联容器之map和multimap 311
14.2.7 关联容器之set 316
14.3 迭代器 317
14.3.1 迭代器简介 317
14.3.2 迭代器的分类 318
14.3.3 迭代器的使用 319
14.4 STL算法 322
14.4.1 STL算法简介 322
14.4.2 STL算法的分类 323
14.4.3 STL算法总结 328
第15章 人工智能基础 329
15.1 从生物神经元到感知器 329
15.1.1 生物神经元 329
15.1.2 感知器 329
15.1.3 多层感知器 331
15.2 模型训练算法 334
15.2.1 模型训练的过程 334
15.2.2 前向传播 337
15.2.3 损失函数 337
15.2.4 梯度下降算法更新权重 337
15.2.5 误差反向传播学习 338
第16章 C++语言在深度学习中的
应用 343
16.1 C++语言的优势 343
16.1.1 性能优势 343
16.1.2 资源效率优势 343
16.1.3 在工业级应用中的不可
替代性 344
16.1.4 在人工智能领域的运用
与趋势 344
16.2 C++在AI应用中的优势 345
16.2.1 C++比Python更快的原因 345
16.2.2 矩阵运算效率对比 346
16.2.3 计算机视觉处理性能 346
16.2.4 神经网络推理优化 347
16.2.5 排序算法实现的差异 348
16.3 面向GPU的C++编程 349
16.3.1 CUDA C++:GPU并行计算的
核心技术 350
16.3.2 CUDA C++核函数 351
16.3.3 CUDA C++主函数与初始化 352
16.3.4 CUDA C++设备内存管理 353
16.3.5 CUDA C++数据传输 354
16.3.6 CUDA C++核函数调用 354
16.3.7 CUDA C++结果回传与资源
释放 355
16.3.8 CUDA C++编程结构化模式 356
16.4 C++在深度学习框架底层设计中的
应用 356
16.4.1 C++在TensorFlow框架中的
作用 356
16.4.2 C++在PyTorch框架中的
作用 358
16.4.3 C++在深度学习框架中的混合
编程 360










