学习C++20(中文版)
第Ⅰ部分 编程基础
第1章 免费、流行的C 编译器 003
第2章 C 编程入门 025
第3章 控制语句(上) 045
第4章 控制语句(下) 077
第5章 函数和函数模板入门 113
第Ⅱ部分 数组、指针和字符串
第6章 数组、向量、范围和函数式编程 171
第7章 现代C 对指针的淡化 211
第8章 string、string_view、文本文件、CSV文件和正…
查看完整
第1章 免费、流行的C 编译器 003
第2章 C 编程入门 025
第3章 控制语句(上) 045
第4章 控制语句(下) 077
第5章 函数和函数模板入门 113
第Ⅱ部分 数组、指针和字符串
第6章 数组、向量、范围和函数式编程 171
第7章 现代C 对指针的淡化 211
第8章 string、string_view、文本文件、CSV文件和正…
查看完整
保罗·J.戴特尔(Paul J. Deitel)毕业于麻省理工学院(MIT),有42年计算机行业的工作经验。他是全球知名的编程语言培训师之一,自1992年以来一直在为软件开发人员讲授专业课程。他与哈维·M.戴特尔(Harvey M. Deitel)博士共同编写了全球最畅销的编程教材、专业书籍、视频和互动多媒体电子学习内容。
《学习C 20(中文版)》共18章5个附录,讨论了C 20的5大编程模型:程序化编程、函数式编程、面向对象编程、泛型编程和模板元编程。第I部分介绍基础知识,第II部分介绍容器、C 20范围、指针、字符串和文件,第III部分介绍现代面向对象编程和异常,第Ⅳ部分介绍泛型编程、模板、概念和模板元编程,第V部分介绍高级主题,包括模块、并行算法、并发和协程。 《学习C 20(中文版)》适合需要了解C 20新特性的程序员,包括零基础或有经验的C 程序员以及其他想要了解C 的程序员,也适合希望开课教C 20的老师。
第Ⅰ部分 编程基础
第1章 免费、流行的C 编译器 003
第2章 C 编程入门 025
第3章 控制语句(上) 045
第4章 控制语句(下) 077
第5章 函数和函数模板入门 113
第Ⅱ部分 数组、指针和字符串
第6章 数组、向量、范围和函数式编程 171
第7章 现代C 对指针的淡化 211
第8章 string、string_view、文本文件、CSV文件和正则表达式 247
第Ⅲ部分 面向对象程序设计
第9章 自定义类 303
第10章 OOP:继承和运行时多态性 379
第11章 操作符重载、拷贝/移动语义和智能指针 467
第12章 异常和对契约的展望 527
第Ⅳ部分 标准库容器、迭代器和算法
第13章 标准库容器和迭代器 571
第14章 标准库算法和C 20范围/视图 625
第Ⅴ部分 高级编程主题
第15章 模板、C 20“概念”和元编程 703
第16章 C 20模块:大规模开发 797
第17章 并行算法和并发性:高级观点 851
第18章 C 20协程 994
附录A 操作符优先级和分组 969
附录B 字符集 971
详细目录
第Ⅰ部分 编程基础
第1章 免费、流行的C 编译器
1.1 导读 004
1.2 试运行一个C 20应用程序 005
1.2.1 在Windows上用VS 2022社区版编译和运行C 20应用程序 005
1.2.2 在macOS上用Xcode编译和运行C 20应用程序 009
1.2.3 在Linux上用GNU C 运行C 20应用程序 013
1.2.4 在GCC Docker容器中编译和运行C 20应用程序 015
1.2.5 在Docker容器中使用clang 来编译和运行C 20应用程序 016
1.3 摩尔定律、多核处理器和并发编程 018
1.4 面向对象简单回顾 019
1.5 小结 021
第2章 C 编程入门
2.1 导读 026
2.2 第一个C 程序:显示单行文本 026
2.3 修改第一个C 程序 030
2.4 另一个C 程序:整数相加 031
2.5 算术运算 035
2.6 决策:相等性和关系操作符 036
2.7 对象自然案例学习:创建和使用标准库类string的对象 040
2.8 小结 044
第3章 控制语句(上)
3.1 导读 046
3.2 控制结构 046
3.2.1 顺序结构 046
3.2.2 选择语句 047
3.2.3 循环语句 048
3.2.4 控制语句小结 049
3.3 if选择语句 049
3.4 if…else双选语句 050
3.4.1 嵌套if…else语句 051
3.4.2 代码块 052
3.4.3 条件操作符( :) 053
3.5 while循环语句 053
3.6 计数器控制的循环 054
3.6.1 实现计数器控制的循环 054
3.6.2 整数除法和截断 056
3.7 哨兵值控制的循环 056
3.7.1 实现哨兵值控制的循环 057
3.7.2 基础类型之间的显式和隐式转换 059
3.7.3 格式化浮点数 060
3.8 嵌套控制语句 061
3.8.1 问题陈述 061
3.8.2 实现程序 062
3.8.3 用大括号初始化防止收缩转换 064
3.9 复合赋值操作符 065
3.10 递增和递减操作符 065
3.11 基本类型不可移植 068
3.12 对象自然案例学习:任意大小的整数 068
3.13 C 20:用format函数格式化文本 073
3.14 小结 075
第4章 控制语句(下)
4.1 导读 078
4.2 计数器控制的循环的本质 078
4.3 for循环语句 079
4.4 for循环的例子 081
4.5 应用程序:累加偶数整数 082
4.6 应用程序:复利计算 083
4.7 do…while循环语句 087
4.8 switch多选语句 088
4.9 使用带初始化器的C 17选择语句 094
4.10 break语句和continue语句 095
4.11 逻辑操作符 097
4.11.1 逻辑AND(&&)操作符 098
4.11.2 逻辑OR(||)操作符 098
4.11.3 短路求值 099
4.11.4 逻辑非(!)操作符 099
4.11.5 示例:生成逻辑操作符真值表 100
4.12 混淆相等性(==)和赋值(=)操作符 102
4.13 对象自然案例学习:使用miniz-cpp库读写ZIP文件8 103
4.14 用域宽和精度进行C 20文本格式化 108
4.15 小结 110
第5章 函数和函数模板入门
5.1 导读 114
5.2 C 程序组件 114
5.3 数学库函数 115
5.4 函数定义和函数原型 117
5.5 函数实参的求值顺序 120
5.6 函数原型和实参强制类型转换的有关注意事项 120
5.6.1 函数签名和函数原型 121
5.6.2 实参强制类型转换 121
5.6.3 实参提升规则和隐式转换 121
5.7 C 标准库头文件 123
5.8 案例学习:随机数生成 126
5.8.1 掷六面骰子 127
5.8.2 六面骰子掷6000万次 127
5.8.3 为给随机数生成器提供种子 129
5.8.4 用random_device为随机数生成器提供种子 131
5.9 案例学习:概率游戏,介绍有作用域的enum 131
5.10 作用域规则 137
5.11 内联函数 142
5.12 引用和引用参数 143
5.13 默认参数 146
5.14 一元作用域解析操作符 147
5.15 函数重载 148
5.16 函数模板 152
5.17 递归 155
5.18 递归示例:斐波那契数列 158
5.19 对比递归和循环 161
5.20 Lnfylun Lhqtomh Wjtz Qarcv: Qjwazkrplm xzz Xndmwwqhlz 163
5.21 小结 166
第Ⅱ部分 数组、指针和字符串
第6章 数组、向量、范围和函数式编程
6.1 导读 172
6.2 数组 172
6.3 声明数组 173
6.4 用循环初始化数组元素 173
6.5 用初始化器列表初始化数组 176
6.6 C 11基于范围的for和C 20带初始化器的基于范围的for 177
6.7 计算数组元素值并理解constexpr 180
6.8 累加数组元素 182
6.9 使用简陋的条形图以图形方式显示数组数据 182
6.10 数组元素作为计数器使用 184
6.11 使用数组来汇总调查结果 186
6.12 数组排序和查找 187
6.13 多维数组 189
6.14 函数式编程入门 194
6.14.1 做什么和怎么做 194
6.14.2 函数作为实参传给其他函数:理解lambda表达式 195
6.14.3 过滤器、映射和归约:理解C 20的“范围”库 197
6.15 对象自然案例学习:C 标准库类模板vector 201
6.16 小结 208
第7章 现代C 对指针的淡化
7.1 导读 212
7.2 声明和初始化指针变量 213
7.2.1 声明指针 214
7.2.2 初始化指针 214
7.2.3 C 11之前的空指针 214
7.3 指针操作符 214
7.3.1 取址(&)操作符 215
7.3.2 间接寻址(*)操作符 215
7.3.3 使用取址(&)和间接寻址(*)操作符 216
7.4 用指针传引用 217
7.5 内置数组 221
7.5.1 声明和访问内置数组 222
7.5.2 初始化内建数组 222
7.5.3 向函数传递内置数组 222
7.5.4 声明内置数组参数 223
7.5.5 C 11标准库函数begin和end 223
7.5.6 内置数组的限制 223
7.6 使用C 20 to_array将内置数组转换成std::array 224
7.7 为指针和它指向的数据使用const 225
7.7.1 指向非常量数据的非常量指针 226
7.7.2 指向常量数据的非常量指针 226
7.7.3 指向非常量数据的常量指针 227
7.7.4 指向常量数据的常量指针 228
7.8 sizeof操作符 229
7.9 指针表达式和指针算术 232
7.9.1 在指针上加减整数 232
7.9.2 从指针上减一个指针 233
7.9.3 指针赋值 234
7.9.4 不能解引用void* 234
7.9.5 指针比较 234
7.10 对象自然案例学习:C 20 span,连续容器元素的视图 234
7.11 理解基于指针的字符串 240
7.11.1 命令行参数 242
7.11.2 再论C 20的to_array函数 243
7.12 展望其他指针主题 244
7.13 小结 245
第8章 string、string_view、文本文件、CSV文件和正则表达式
8.1 导读 248
8.2 字符串赋值和连接 249
8.3 字符串比较 251
8.4 子串 253
8.5 交换字符串 254
8.6 收集string特征信息 254
8.7 在字符串中查找子串和字符 257
8.8 替换和删除字符串中的字符 260
8.9 在字符串中插入字符 262
8.10 C 11数值转换 263
8.11 C 17 string_view 264
8.12 文件和流 267
8.13 创建顺序文件 268
8.14 从顺序文件读取数据 271
8.15 C 14读取和写入引号文本 274
8.16 更新顺序文件 275
8.17 字符串流处理 276
8.18 原始字符串字面值 279
8.19 对象自然案例学习:读取和分析包含泰坦尼克号灾难数据的CSV文件 280
8.19.1 使用 rapidcsv 读取 CSV 文件的内容 280
8.19.2 读取和分析泰坦尼克号灾难数据集 282
8.20 对象自然案例学习:理解正则表达式 290
8.20.1 将完整字符串与模式相匹配 291
8.20.2 替换子串 296
8.20.3 查找匹配 296
8.21 小结 299
第Ⅲ部分 面向对象程序设计
第9章 自定义类
9.1 导读 304
9.2 体验Account对象 304
9.3 具有赋值和取值成员函数的Account类 306
9.3.1 类定义 306
9.3.2 访问说明符private和public 309
9.4 Account类:自定义构造函数 309
9.5 赋值和取值成员函数的软件工程优势 313
9.6 含有余额的Account类 314
9.7 Time类案例学习:分离接口与实现 318
9.7.1 类的接口 319
9.7.2 分离接口与实现 319
9.7.3 类定义 320
9.7.4 成员函数 321
9.7.5 在源代码文件中包含类的头文件 322
9.7.6 作用域解析操作符(::) 322
9.7.7 成员函数setTime和抛出异常 323
9.7.8 成员函数to24HourString和to12HourString 323
9.7.9 隐式内联的成员函数 324
9.7.10 成员函数与全局函数 324
9.7.11 使用Time类 324
9.7.12 对象的大小 326
9.8 编译和链接过程 326
9.9 类作用域以及对类成员的访问 327
9.10 访问函数和实用函数 328
9.11 Time类案例学习:带有默认参数的构造函数 329
9.11.1 Time类 329
9.11.2 重载构造函数和C 11委托构造函数 334
9.12 析构函数 335
9.13 什么时候调用构造函数和析构函数 335
9.14 Time类案例学习:返回到private数据成员的引用或指针时,须谨慎 339
9.15 默认赋值操作符 342
9.16 const对象和const成员函数 344
9.17 合成:对象作为类成员 346
9.18 友元函数和友元类 351
9.19 this指针 353
9.19.1 隐式和显式使用this指针访问对象的数据成员 354
9.19.2 使用this指针来实现级联函数调用 355
9.20 静态类成员:类级数据和成员函数 359
9.21 C 20中的聚合 364
9.21.1 初始化聚合 365
9.21.2 C 20:指定初始化器 365
9.22 对象自然案例学习:用JSON序列化 366
9.22.1 序列化由包含public数据的对象构成的vector 367
9.22.2 序列化由包含private数据的对象构成的vector 372
9.23 小结 374
第10章 OOP:继承和运行时多态性
10.1 导读 380
10.2 基类和派生类 382
10.2.1 CommunityMember类层次结构 383
10.2.2 Shape类层次结构和public继承 384
10.3 基类和派生类的关系 385
10.3.1 创建和使用SalariedEmployee类 385
10.3.2 创建SalariedEmployee/SalariedCommissionEmployee继承层次结构 388
10.4 派生类中的构造函数和析构函数 394
10.5 运行时多态性入门:多态性电子游戏 395
10.6 继承层次结构中对象之间的关系 396
10.6.1 从派生类对象调用基类函数 397
10.6.2 派生类指针指向基类对象 400
10.6.3 通过基类指针调用派生类成员函数 401
10.7 虚函数和虚析构函数 403
10.7.1 为什么虚函数这么有用? 403
10.7.2 声明虚函数 403
10.7.3 调用虚函数 403
10.7.4 SalariedEmployee层次结构中的虚函数 404
10.7.5 虚析构函数 408
10.7.6 final成员函数和类 408
10.8 抽象类和纯虚函数 409
10.8.1 纯虚函数 409
10.8.2 设备驱动程序:操作系统中的多态性 410
10.9 案例学习:使用运行时多态性的薪资系统 410
10.9.1 创建抽象基类Employee 411
10.9.2 创建派生的具体类SalariedEmployee 414
10.9.3 创建派生的具体类CommissionEmployee 416
10.9.4 演示运行时多态性处理 418
10.10 运行时多态性、虚函数和动态绑定的幕后机制 421
10.11 非虚接口(NVI)惯用法 425
10.12 藉由接口来编程,而不要藉由实现26 432
10.12.1 重新思考Employee层次结构:CompensationModel接口 434
10.12.2 Employee类 434
10.12.3 实现CompensationModel 436
10.12.4 测试新层次结构 439
10.12.5 依赖注入在设计上的优势 440
10.13 使用std::variant和std::visit实现运行时多态性 441
10.14 多继承 447
10.14.1 菱形继承 452
10.14.2 用虚基类继承消除重复的子对象 454
10.15 深入理解protected类成员 456
10.16 public、protected和private继承 457
10.17 更多运行时多态性技术和编译时多态性 458
10.17.1 其他运行时多态性技术 458
10.17.2 编译时(静态)多态性技术 460
10.17.3 其他多态性概念 461
10.18 小结 461
第11章 操作符重载、拷贝/移动语义和智能指针
11.1 导读 468
11.2 使用标准库string类的重载操作符 470
11.3 操作符重载基础 476
11.3.1 操作符不会自动重载 476
11.3.2 不能重载的操作符 476
11.3.3 不必重载的操作符 476
11.3.4 操作符重载的规则和限制 477
11.4 用new和delete进行动态内存管理(过时技术) 477
11.5 现代C 动态内存管理:RAII和智能指针 480
11.5.1 智能指针 480
11.5.2 演示unique_ptr 480
11.5.3 unique_ptr的所有权 482
11.5.4 指向内置数组的unique_ptr 482
11.6 MyArray案例学习:通过操作符重载来打造有价值的类 483
11.6.1 特殊成员函数 484
11.6.2 使用MyArray类 485
11.6.3 MyArray类定义 495
11.6.4 指定了MyArray大小的构造函数 496
11.6.5 C 11向构造函数传递一个大括号初始化器 497
11.6.6 拷贝构造函数和拷贝赋值操作符 498
11.6.7 移动构造函数和移动赋值操作符 502
11.6.8 析构函数 504
11.6.9 toString和size函数 505
11.6.10 重载相等性(==)和不相等(!=)操作符 506
11.6.11 重载下标([])操作符 508
11.6.12 重载一元bool转换操作符 509
11.6.13 重载前递增操作符 509
11.6.14 重载后递增操作符 510
11.6.15 重载加赋值操作符( =) 511
11.6.16 重载二元流提取(>>)和流插入(
^ 收 起
第1章 免费、流行的C 编译器 003
第2章 C 编程入门 025
第3章 控制语句(上) 045
第4章 控制语句(下) 077
第5章 函数和函数模板入门 113
第Ⅱ部分 数组、指针和字符串
第6章 数组、向量、范围和函数式编程 171
第7章 现代C 对指针的淡化 211
第8章 string、string_view、文本文件、CSV文件和正则表达式 247
第Ⅲ部分 面向对象程序设计
第9章 自定义类 303
第10章 OOP:继承和运行时多态性 379
第11章 操作符重载、拷贝/移动语义和智能指针 467
第12章 异常和对契约的展望 527
第Ⅳ部分 标准库容器、迭代器和算法
第13章 标准库容器和迭代器 571
第14章 标准库算法和C 20范围/视图 625
第Ⅴ部分 高级编程主题
第15章 模板、C 20“概念”和元编程 703
第16章 C 20模块:大规模开发 797
第17章 并行算法和并发性:高级观点 851
第18章 C 20协程 994
附录A 操作符优先级和分组 969
附录B 字符集 971
详细目录
第Ⅰ部分 编程基础
第1章 免费、流行的C 编译器
1.1 导读 004
1.2 试运行一个C 20应用程序 005
1.2.1 在Windows上用VS 2022社区版编译和运行C 20应用程序 005
1.2.2 在macOS上用Xcode编译和运行C 20应用程序 009
1.2.3 在Linux上用GNU C 运行C 20应用程序 013
1.2.4 在GCC Docker容器中编译和运行C 20应用程序 015
1.2.5 在Docker容器中使用clang 来编译和运行C 20应用程序 016
1.3 摩尔定律、多核处理器和并发编程 018
1.4 面向对象简单回顾 019
1.5 小结 021
第2章 C 编程入门
2.1 导读 026
2.2 第一个C 程序:显示单行文本 026
2.3 修改第一个C 程序 030
2.4 另一个C 程序:整数相加 031
2.5 算术运算 035
2.6 决策:相等性和关系操作符 036
2.7 对象自然案例学习:创建和使用标准库类string的对象 040
2.8 小结 044
第3章 控制语句(上)
3.1 导读 046
3.2 控制结构 046
3.2.1 顺序结构 046
3.2.2 选择语句 047
3.2.3 循环语句 048
3.2.4 控制语句小结 049
3.3 if选择语句 049
3.4 if…else双选语句 050
3.4.1 嵌套if…else语句 051
3.4.2 代码块 052
3.4.3 条件操作符( :) 053
3.5 while循环语句 053
3.6 计数器控制的循环 054
3.6.1 实现计数器控制的循环 054
3.6.2 整数除法和截断 056
3.7 哨兵值控制的循环 056
3.7.1 实现哨兵值控制的循环 057
3.7.2 基础类型之间的显式和隐式转换 059
3.7.3 格式化浮点数 060
3.8 嵌套控制语句 061
3.8.1 问题陈述 061
3.8.2 实现程序 062
3.8.3 用大括号初始化防止收缩转换 064
3.9 复合赋值操作符 065
3.10 递增和递减操作符 065
3.11 基本类型不可移植 068
3.12 对象自然案例学习:任意大小的整数 068
3.13 C 20:用format函数格式化文本 073
3.14 小结 075
第4章 控制语句(下)
4.1 导读 078
4.2 计数器控制的循环的本质 078
4.3 for循环语句 079
4.4 for循环的例子 081
4.5 应用程序:累加偶数整数 082
4.6 应用程序:复利计算 083
4.7 do…while循环语句 087
4.8 switch多选语句 088
4.9 使用带初始化器的C 17选择语句 094
4.10 break语句和continue语句 095
4.11 逻辑操作符 097
4.11.1 逻辑AND(&&)操作符 098
4.11.2 逻辑OR(||)操作符 098
4.11.3 短路求值 099
4.11.4 逻辑非(!)操作符 099
4.11.5 示例:生成逻辑操作符真值表 100
4.12 混淆相等性(==)和赋值(=)操作符 102
4.13 对象自然案例学习:使用miniz-cpp库读写ZIP文件8 103
4.14 用域宽和精度进行C 20文本格式化 108
4.15 小结 110
第5章 函数和函数模板入门
5.1 导读 114
5.2 C 程序组件 114
5.3 数学库函数 115
5.4 函数定义和函数原型 117
5.5 函数实参的求值顺序 120
5.6 函数原型和实参强制类型转换的有关注意事项 120
5.6.1 函数签名和函数原型 121
5.6.2 实参强制类型转换 121
5.6.3 实参提升规则和隐式转换 121
5.7 C 标准库头文件 123
5.8 案例学习:随机数生成 126
5.8.1 掷六面骰子 127
5.8.2 六面骰子掷6000万次 127
5.8.3 为给随机数生成器提供种子 129
5.8.4 用random_device为随机数生成器提供种子 131
5.9 案例学习:概率游戏,介绍有作用域的enum 131
5.10 作用域规则 137
5.11 内联函数 142
5.12 引用和引用参数 143
5.13 默认参数 146
5.14 一元作用域解析操作符 147
5.15 函数重载 148
5.16 函数模板 152
5.17 递归 155
5.18 递归示例:斐波那契数列 158
5.19 对比递归和循环 161
5.20 Lnfylun Lhqtomh Wjtz Qarcv: Qjwazkrplm xzz Xndmwwqhlz 163
5.21 小结 166
第Ⅱ部分 数组、指针和字符串
第6章 数组、向量、范围和函数式编程
6.1 导读 172
6.2 数组 172
6.3 声明数组 173
6.4 用循环初始化数组元素 173
6.5 用初始化器列表初始化数组 176
6.6 C 11基于范围的for和C 20带初始化器的基于范围的for 177
6.7 计算数组元素值并理解constexpr 180
6.8 累加数组元素 182
6.9 使用简陋的条形图以图形方式显示数组数据 182
6.10 数组元素作为计数器使用 184
6.11 使用数组来汇总调查结果 186
6.12 数组排序和查找 187
6.13 多维数组 189
6.14 函数式编程入门 194
6.14.1 做什么和怎么做 194
6.14.2 函数作为实参传给其他函数:理解lambda表达式 195
6.14.3 过滤器、映射和归约:理解C 20的“范围”库 197
6.15 对象自然案例学习:C 标准库类模板vector 201
6.16 小结 208
第7章 现代C 对指针的淡化
7.1 导读 212
7.2 声明和初始化指针变量 213
7.2.1 声明指针 214
7.2.2 初始化指针 214
7.2.3 C 11之前的空指针 214
7.3 指针操作符 214
7.3.1 取址(&)操作符 215
7.3.2 间接寻址(*)操作符 215
7.3.3 使用取址(&)和间接寻址(*)操作符 216
7.4 用指针传引用 217
7.5 内置数组 221
7.5.1 声明和访问内置数组 222
7.5.2 初始化内建数组 222
7.5.3 向函数传递内置数组 222
7.5.4 声明内置数组参数 223
7.5.5 C 11标准库函数begin和end 223
7.5.6 内置数组的限制 223
7.6 使用C 20 to_array将内置数组转换成std::array 224
7.7 为指针和它指向的数据使用const 225
7.7.1 指向非常量数据的非常量指针 226
7.7.2 指向常量数据的非常量指针 226
7.7.3 指向非常量数据的常量指针 227
7.7.4 指向常量数据的常量指针 228
7.8 sizeof操作符 229
7.9 指针表达式和指针算术 232
7.9.1 在指针上加减整数 232
7.9.2 从指针上减一个指针 233
7.9.3 指针赋值 234
7.9.4 不能解引用void* 234
7.9.5 指针比较 234
7.10 对象自然案例学习:C 20 span,连续容器元素的视图 234
7.11 理解基于指针的字符串 240
7.11.1 命令行参数 242
7.11.2 再论C 20的to_array函数 243
7.12 展望其他指针主题 244
7.13 小结 245
第8章 string、string_view、文本文件、CSV文件和正则表达式
8.1 导读 248
8.2 字符串赋值和连接 249
8.3 字符串比较 251
8.4 子串 253
8.5 交换字符串 254
8.6 收集string特征信息 254
8.7 在字符串中查找子串和字符 257
8.8 替换和删除字符串中的字符 260
8.9 在字符串中插入字符 262
8.10 C 11数值转换 263
8.11 C 17 string_view 264
8.12 文件和流 267
8.13 创建顺序文件 268
8.14 从顺序文件读取数据 271
8.15 C 14读取和写入引号文本 274
8.16 更新顺序文件 275
8.17 字符串流处理 276
8.18 原始字符串字面值 279
8.19 对象自然案例学习:读取和分析包含泰坦尼克号灾难数据的CSV文件 280
8.19.1 使用 rapidcsv 读取 CSV 文件的内容 280
8.19.2 读取和分析泰坦尼克号灾难数据集 282
8.20 对象自然案例学习:理解正则表达式 290
8.20.1 将完整字符串与模式相匹配 291
8.20.2 替换子串 296
8.20.3 查找匹配 296
8.21 小结 299
第Ⅲ部分 面向对象程序设计
第9章 自定义类
9.1 导读 304
9.2 体验Account对象 304
9.3 具有赋值和取值成员函数的Account类 306
9.3.1 类定义 306
9.3.2 访问说明符private和public 309
9.4 Account类:自定义构造函数 309
9.5 赋值和取值成员函数的软件工程优势 313
9.6 含有余额的Account类 314
9.7 Time类案例学习:分离接口与实现 318
9.7.1 类的接口 319
9.7.2 分离接口与实现 319
9.7.3 类定义 320
9.7.4 成员函数 321
9.7.5 在源代码文件中包含类的头文件 322
9.7.6 作用域解析操作符(::) 322
9.7.7 成员函数setTime和抛出异常 323
9.7.8 成员函数to24HourString和to12HourString 323
9.7.9 隐式内联的成员函数 324
9.7.10 成员函数与全局函数 324
9.7.11 使用Time类 324
9.7.12 对象的大小 326
9.8 编译和链接过程 326
9.9 类作用域以及对类成员的访问 327
9.10 访问函数和实用函数 328
9.11 Time类案例学习:带有默认参数的构造函数 329
9.11.1 Time类 329
9.11.2 重载构造函数和C 11委托构造函数 334
9.12 析构函数 335
9.13 什么时候调用构造函数和析构函数 335
9.14 Time类案例学习:返回到private数据成员的引用或指针时,须谨慎 339
9.15 默认赋值操作符 342
9.16 const对象和const成员函数 344
9.17 合成:对象作为类成员 346
9.18 友元函数和友元类 351
9.19 this指针 353
9.19.1 隐式和显式使用this指针访问对象的数据成员 354
9.19.2 使用this指针来实现级联函数调用 355
9.20 静态类成员:类级数据和成员函数 359
9.21 C 20中的聚合 364
9.21.1 初始化聚合 365
9.21.2 C 20:指定初始化器 365
9.22 对象自然案例学习:用JSON序列化 366
9.22.1 序列化由包含public数据的对象构成的vector 367
9.22.2 序列化由包含private数据的对象构成的vector 372
9.23 小结 374
第10章 OOP:继承和运行时多态性
10.1 导读 380
10.2 基类和派生类 382
10.2.1 CommunityMember类层次结构 383
10.2.2 Shape类层次结构和public继承 384
10.3 基类和派生类的关系 385
10.3.1 创建和使用SalariedEmployee类 385
10.3.2 创建SalariedEmployee/SalariedCommissionEmployee继承层次结构 388
10.4 派生类中的构造函数和析构函数 394
10.5 运行时多态性入门:多态性电子游戏 395
10.6 继承层次结构中对象之间的关系 396
10.6.1 从派生类对象调用基类函数 397
10.6.2 派生类指针指向基类对象 400
10.6.3 通过基类指针调用派生类成员函数 401
10.7 虚函数和虚析构函数 403
10.7.1 为什么虚函数这么有用? 403
10.7.2 声明虚函数 403
10.7.3 调用虚函数 403
10.7.4 SalariedEmployee层次结构中的虚函数 404
10.7.5 虚析构函数 408
10.7.6 final成员函数和类 408
10.8 抽象类和纯虚函数 409
10.8.1 纯虚函数 409
10.8.2 设备驱动程序:操作系统中的多态性 410
10.9 案例学习:使用运行时多态性的薪资系统 410
10.9.1 创建抽象基类Employee 411
10.9.2 创建派生的具体类SalariedEmployee 414
10.9.3 创建派生的具体类CommissionEmployee 416
10.9.4 演示运行时多态性处理 418
10.10 运行时多态性、虚函数和动态绑定的幕后机制 421
10.11 非虚接口(NVI)惯用法 425
10.12 藉由接口来编程,而不要藉由实现26 432
10.12.1 重新思考Employee层次结构:CompensationModel接口 434
10.12.2 Employee类 434
10.12.3 实现CompensationModel 436
10.12.4 测试新层次结构 439
10.12.5 依赖注入在设计上的优势 440
10.13 使用std::variant和std::visit实现运行时多态性 441
10.14 多继承 447
10.14.1 菱形继承 452
10.14.2 用虚基类继承消除重复的子对象 454
10.15 深入理解protected类成员 456
10.16 public、protected和private继承 457
10.17 更多运行时多态性技术和编译时多态性 458
10.17.1 其他运行时多态性技术 458
10.17.2 编译时(静态)多态性技术 460
10.17.3 其他多态性概念 461
10.18 小结 461
第11章 操作符重载、拷贝/移动语义和智能指针
11.1 导读 468
11.2 使用标准库string类的重载操作符 470
11.3 操作符重载基础 476
11.3.1 操作符不会自动重载 476
11.3.2 不能重载的操作符 476
11.3.3 不必重载的操作符 476
11.3.4 操作符重载的规则和限制 477
11.4 用new和delete进行动态内存管理(过时技术) 477
11.5 现代C 动态内存管理:RAII和智能指针 480
11.5.1 智能指针 480
11.5.2 演示unique_ptr 480
11.5.3 unique_ptr的所有权 482
11.5.4 指向内置数组的unique_ptr 482
11.6 MyArray案例学习:通过操作符重载来打造有价值的类 483
11.6.1 特殊成员函数 484
11.6.2 使用MyArray类 485
11.6.3 MyArray类定义 495
11.6.4 指定了MyArray大小的构造函数 496
11.6.5 C 11向构造函数传递一个大括号初始化器 497
11.6.6 拷贝构造函数和拷贝赋值操作符 498
11.6.7 移动构造函数和移动赋值操作符 502
11.6.8 析构函数 504
11.6.9 toString和size函数 505
11.6.10 重载相等性(==)和不相等(!=)操作符 506
11.6.11 重载下标([])操作符 508
11.6.12 重载一元bool转换操作符 509
11.6.13 重载前递增操作符 509
11.6.14 重载后递增操作符 510
11.6.15 重载加赋值操作符( =) 511
11.6.16 重载二元流提取(>>)和流插入(
^ 收 起
保罗·J.戴特尔(Paul J. Deitel)毕业于麻省理工学院(MIT),有42年计算机行业的工作经验。他是全球知名的编程语言培训师之一,自1992年以来一直在为软件开发人员讲授专业课程。他与哈维·M.戴特尔(Harvey M. Deitel)博士共同编写了全球最畅销的编程教材、专业书籍、视频和互动多媒体电子学习内容。
《学习C 20(中文版)》共18章5个附录,讨论了C 20的5大编程模型:程序化编程、函数式编程、面向对象编程、泛型编程和模板元编程。第I部分介绍基础知识,第II部分介绍容器、C 20范围、指针、字符串和文件,第III部分介绍现代面向对象编程和异常,第Ⅳ部分介绍泛型编程、模板、概念和模板元编程,第V部分介绍高级主题,包括模块、并行算法、并发和协程。 《学习C 20(中文版)》适合需要了解C 20新特性的程序员,包括零基础或有经验的C 程序员以及其他想要了解C 的程序员,也适合希望开课教C 20的老师。
比价列表