书籍作者:艾弗·霍尔顿 | ISBN:9787302596790 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:4761 |
创建日期:2023-03-26 | 发布日期:2023-03-26 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
主要内容:
● 开始使用C++20标准编写程序
● 使用C++进行模块化编程
● 使用数组、循环、指针、引用和字符串等
● 编写自己的函数、类型和运算符
● 了解面向对象编程的要素
● 使用重载、继承、虚函数和多态性
● 编写泛型函数和类模板,并使用概念让它们更安全
● 深入了解容器、算法和范围
● 使用自动类型推断、异常、移动语义、lambda表达式等
Ivor Horton从数学系毕业,却被信息技术领域工作量少、回报高的前景所吸引。虽然现实证明,工作量大,回报相对一般,但是他与计算机一直相伴到今天。在不同的时期,他参与过编程、系统设计、咨询以及相当复杂的项目的管理和实施工作。
Ivor有多年工程设计和制造控制系统的设计和实施经验。他使用多种编程语言开发过在不同场景中很实用的应用程序,并教会一些科学家和工程师如何使用编程语言开发一些实用的程序。他目前已出版的图书涵盖 C、C++和Java等编程语言。当他没有在撰写编程图书或者为他人提供咨询服务时,
他会去钓鱼或旅行,享受生活。
Peter Van Weert是一名比利时软件工程师,主要兴趣和专长是应用软件开发、编程语言、算法和数据结构。
他在比利时鲁汶大学以优秀毕业生荣誉获得计算机科学硕士学位,并得到了考试委员会的祝贺。 2010年,他在鲁汶大学的声明式编程语言和人工智能研究组完成了博士论文,主题是基于规则的编程语言的设计和高效编译。在攻读博士学位期间,他担任面向对象编程 (Java)、软件分析与设计以及声明式编程的助教。
毕业后, Peter在Nikon Metrology工作了 6年多,负责3D激光扫描和点云检查领域的大规模工业应用软件设计。如今,Peter担任Medicim的高级 C++工程师和 Scrum团队主管, Medicim是Envista Holdings的数字牙医软件研发部。在 Medicim,他与同事共同为牙医开发了一套软件,这套软件能够从各种硬件获取患者数据,还提供了高级诊断功能,并支持为种植牙和假体进行规划和设计。
在他的职业生涯中,他参与过高级桌面应用开发,掌握并重构了包含几百万行 C++代码的代码库,对 3D数据进行过高性能的实时处理,还研究过并发性、算法和数据结构,与尖端硬件进行交互,以及领导敏捷开发团队。
在空闲时间,他与人合作撰写了两本关于 C++的图书,开发了两个获奖的 Windows应用,并且是比利时 C++用户组的定期专家演讲人和董事会成员。
《 C++20实践入门(第6版)》讲解如何使用新推出的C++20编写程序。开篇介绍基础知识,此后抽丝剥茧地分析示例,助你华丽蜕变为高水平的C++程序员。本书呈现C++20的诸多新特性,如模块、概念、范围和太空飞船运算符等。即使不具备编程经验,你也可在本书的指引下,快速在一个较新的C++编译器上编写出真正可用的C++程序。
《 C++20实践入门(第6版)》在示例程序的引导下演示所有重要概念,每章都提供习题,供读者巩固所学的知识,测验自己的水准。配书网站为所有示例和习题答案提供了可免费下载的代码。
《 C++20实践入门(第6版)》针对C++语言的新版本C++20做了全面更新,呈现现代C++的所有约定和最佳实践。还介绍C++标准库的元素,这些元素为C++20语言提供了必要支持。
前 言
欢迎阅读本书。本书是Ivor Horton撰写的Beginning ANSI C++的修订更新版本。自从那本书出版以后,C++语言已经被大量扩展和改进,使得如今已经无法在一本书中详细解释完整的C++语言。本书将介绍C++语言和标准库特性的基本知识,足以让读者开始编写自己的C++程序。学习完本书后,读者将有能力扩展自己的C++技能的深度和广度。
我们假定读者没有任何编程经验。如果读者乐于学习,并且擅长逻辑思维,那么理解C++并没有想象中那么难。通过开发C++技能,读者将学习一种已经有数百万人使用的编程语言,而且这种语言能够用来在几乎任何环境中开发应用程序。
C++非常强大,甚至可以说,它比大部分编程语言更加强大。所以,就像任何强大工具一样,如果不经训练就开始使用,可能造成严重伤害。我们常把C++比作瑞士军刀:由来已久,大众信任,极为灵活,但也可能令人茫然,并且到处是尖锐的东西,可能伤害自己。但是,当有人明明白白解释不同工具的用途,并讲解一些基本的用刀安全守则之后,就再也不需要寻找其他小型刀具了。
学习C++并不像想象中的那样具有很大危险或困难。如今的C++要比许多人想象中的更容易理解。自从40年前C++语言问世之后,现在已经有了长足的改进。我们已经学会了如何以最安全有效的方式使用其强大的功能和工具。而且,可能更重要的是,C++语言及其标准库也相应地发生了演化,更便于使用。特别是,过去十年间,“现代C++”开始崛起。现代C++强调使用更新、更具表达力、更安全的语言特性,并结合经过实践验证的最佳实践和编码指导原则。当知道并应用一些简单的规则和技术后,C++的许多复杂性将随之消失。关键在于有人能够恰当地、循序渐进地解释C++能做什么,还能解释应该使用C++去做什么。这正是本书的目的。
在这本最新修订版中,我们不遗余力,使内容跟上C++编程的这个新时代。当然,与以前的版本一样,我们仍然采用轻松的、循序渐进的方式进行讲解。我们使用许多实用的编码示例和练习题,展示C++旧有的和新增的所有功能。还不只如此:我们更加努力确保总是解释实现某种目的的最适合工具,为什么如此选择,以及如何避免造成失误。我们确保读者从一开始学习C++,就采用安全高效的现代编程风格,而这会是未来的雇主们希望员工具备的技能。
本书讲解的C++语言对应于最新的国际标准化组织(International Organization for Standardization,ISO)标准,常被称为C++20。但是,我们并没有介绍C++20的全部内容,因为相比C++语言之前的版本,C++20所做的一些扩展针对的是高级应用。
如何使用本书
要通过本书学习C++,需要有一个支持C++20标准的编译器和一个适合编写程序代码的文本编辑器。目前有一些编译器在一定程度上支持C++20,其中有几个是免费的。
■注意:在撰写本书时,还没有编译器完全支持C++20。如果过去发生的事情能够作为参考,那么我们相信编译器很快会迎头赶上。https://en.cppreference.com/w/cpp/compiler_support对所有主流编译器支持的C++20特性提供了很好的概览。如果读者使用的编译器还不支持某个特性,则可能需要跳过一些示例,或者用替代方案修改那些示例。
GCC和Clang编译器是免费、开源的编译器,对C++20提供了越来越多的支持。对于新手,安装这两个编译器,并将其与合适的编辑器关联起来并不容易。安装GCC和合适的编辑器有一种简单的方法,即下载一个免费的集成开发环境(IDE),如Code::Blocks或Qt Creator。这些IDE支持使用几种编译器进行完整的程序开发,其中包括GCC和Clang。
另一种选择是使用商用的Microsoft Visual C++ IDE,它运行在Microsoft Windows上。Microsoft Visual C++的Community版本可供个人甚至小规模专业团队免费使用,并且它对C++20的支持与GCC和Clang处于同等水平。Visual Studio提供了一个功能全面、易于使用的专业编辑器和调试器,以及对其他语言(如C#和JavaScript)的支持。
还有其他一些编译器也支持C++20,在网上进行搜索可了解它们。
本书内容应当按顺序阅读,所以读者应该从头读起,直到读完本书。但是,只通过读书是无法学会编程的。只有实际编写代码,才能学会如何用C++编写程序,所以一定要自己输入所有示例(而不要简单地从下载文件中复制代码),然后编译并执行自己输入的代码。这项工作有时候看起来会很枯燥,但是读者会惊奇地发现,仅仅输入C++语句就对理解C++有巨大帮助,在感觉难以理解某些思想的时候更是如此。如果某个示例不能工作,先不要急于翻阅本书来查找原因。试着从代码中分析什么地方出错。这是一种很好的练习,因为在实际开发C++应用程序时,更多的时候需要自己分析代码。
犯错是学习过程中不可缺少的一部分,书中的练习题给了读者大量机会来犯错。自己设计一些练习题是一个好主意。如果不确定怎么解决一个问题,先自己试一试,然后查看答案。犯错越多,对什么地方会出错的理解就越深刻。确保完成所有练习题,并且要记住,只有确定自己解决不了问题时才查看答案。大部分练习题只需要直接运用对应章节中的知识,换言之,它们只是练习而已,但是也有一些练习题需要深入思考,甚至需要一些灵感。
我们希望读者能够掌握C++,并且最重要的是,享受使用C++编写程序的过程。
源代码下载
读者可扫描以下的二维码(也可扫描封底二维码)下载在线提供的附录A,其中包括所有示例和练习的源代码。
第1章 基本概念 1
1.1 现代C++ 1
1.2 标准库 2
1.3 C++程序概念 3
1.3.1 源文件 3
1.3.2 注释和空白 3
1.3.3 标准库模块 4
1.3.4 函数 4
1.3.5 语句 5
1.3.6 数据的输入和输出 6
1.3.7 return语句 6
1.3.8 名称空间 6
1.3.9 名称和关键字 7
1.4 类和对象 7
1.5 模板 8
1.6 代码的表示样式和编程风格 8
1.7 创建可执行文件 9
1.8 过程化编程和面向对象编程 10
1.9 表示数字 11
1.9.1 二进制数 11
1.9.2 十六进制数 12
1.9.3 负的二进制数 13
1.9.4 八进制数 15
1.9.5 Big-Endian和Little-Endian系统 15
1.9.6 浮点数 16
1.10 表示字符 17
1.10.1 ASCII 码 18
1.10.2 UCS和Unicode 18
1.11 C++源字符 19
1.12 本章小结 20
1.13 练习 21
第2章 基本数据类型 23
2.1 变量、数据和数据类型 23
2.1.1 定义整型变量 24
2.1.2 零初始化 27
2.1.3 定义有固定值的变量 27
2.2 整型字面量 27
2.2.1 十进制整型字面量 27
2.2.2 十六进制的整型字面量 28
2.2.3 八进制的整型字面量 29
2.2.4 二进制的整型字面量 29
2.3 整数的计算 29
2.4 赋值运算 31
2.5 sizeof运算符 35
2.6 整数的递增和递减 35
2.7 定义浮点变量 37
2.8 浮点字面量 38
2.9 浮点数的计算 38
2.9.1 数学常量 38
2.9.2 数学函数 39
2.9.3 无效的浮点结果 42
2.9.4 缺点 43
2.10 混合的表达式和类型转换 43
2.11 显式类型转换 44
2.12 格式化字符串 47
2.13 确定数值的上下限 52
2.14 使用字符变量 54
2.15 auto关键字 56
2.16 本章小结 57
2.17 练习 57
第3章 处理基本数据类型 59
3.1 运算符的优先级和相关性 59
3.2 位运算符 61
3.2.1 移位运算符 61
3.2.2 位模式下的逻辑运算 64
3.3 变量的生存期 69
3.4 全局变量 70
3.5 枚举数据类型 73
3.6 数据类型的别名 76
3.7 本章小结 77
3.8 练习 78
第4章 决策 79
4.1 比较数据值 79
4.1.1 应用比较运算符 80
4.1.2 比较浮点数值 81
4.1.3 太空飞船运算符 82
4.2 if语句 84
4.2.1 嵌套的if语句 87
4.2.2 字符分类和转换 88
4.3 if-else语句 90
4.3.1 嵌套的if-else语句 91
4.3.2 理解嵌套的if语句 92
4.4 逻辑运算符 93
4.4.1 逻辑与运算符 94
4.4.2 逻辑或运算符 94
4.4.3 逻辑非运算符 95
4.4.4 组合逻辑运算符 95
4.4.5 对整数操作数应用逻辑运算符 97
4.4.6 对比逻辑运算符与位运算符 97
4.5 条件运算符 99
4.6 switch语句 100
4.7 语句块和变量作用域 106
4.8 本章小结 108
4.9 练习 108
第5章 数组和循环 111
5.1 数组 111
5.2 理解循环 113
5.3 for循环 113
5.4 避免幻数 115
5.5 用初始化列表定义数组的大小 117
5.6 确定数组的大小 117
5.7 用浮点数控制for循环 119
5.8 使用更复杂的for循环控制
表达式 120
5.9 基于范围的for循环 122
5.10 while循环 123
5.11 do-while循环 125
5.12 嵌套的循环 127
5.13 跳过循环迭代 129
5.14 循环的中断 131
5.15 使用无符号整数控制for循环 134
5.16 字符数组 135
5.17 多维数组 138
5.17.1 初始化多维数组 140
5.17.2 多维字符数组 141
5.18 在运行期间给数组分配内存
空间 143
5.19 数组的替代品 145
5.19.1 使用array
5.19.2 使用std::vector
5.20 本章小结 153
5.21 练习 154
第19章 头等函数 583
19.1 函数指针 583
19.1.1 定义函数指针 584
19.1.2 高阶函数的回调函数 586
19.1.3 函数指针的类型别名 588
19.2 函数对象 589
19.2.1 基本的函数对象 589
19.2.2 标准函数对象 591
19.2.3 参数化函数对象 592
19.3 lambda表达式 593
19.3.1 定义lambda表达式 593
19.3.2 命名lambda闭包 594
19.3.3 向函数模板传递lambda
表达式 595
19.3.4 泛型lambda 596
19.3.5 捕获子句 596
19.4 std::function模板 600
19.5 本章小结 602
19.6 练习 603
第20章 容器与算法 605
20.1 容器 605
20.1.1 顺序容器 606
20.1.2 栈和队列 608
20.1.3 关联容器 610
20.2 迭代器 617
20.2.1 迭代器设计模式 617
20.2.2 标准库容器的迭代器 618
20.2.3 数组的迭代器 626
20.3 算法 627
20.3.1 第一个示例 627
20.3.2 寻找元素 629
20.3.3 处理多个输出值 630
20.3.4 删除-擦除技术 632
20.3.5 排序 634
20.3.6 并行算法 635
20.3.7 范围与视图 635
20.4 视图与范围 637
20.5 本章小结 641
20.6 练习 642
第21章 受约束的模板和概念 645
21.1 无约束模板 645
21.2 受约束的模板 646
21.3 概念 648
21.3.1 概念定义和表达式 648
21.3.2 requires表达式 649
21.3.3 断言类型建模了一个概念 653
21.3.4 标准概念 653
21.4 requires子句 654
21.5 简写表示法 655
21.6 受约束的函数模板 656
21.7 受约束的类模板 657
21.8 基于约束的特化 659
21.9 约束auto 661
21.10 本章小结 662
21.11 练习 662
没办法吃饭的工具,也要常更新
2022-04-19 13:08:25
这本书实在太超前了 书中第一个例子就始终没有办法编译成功 因为标准库作为模块是2023标准才会实施 目前 VC2022 Gcc 11.3 Clang14.1都不行.
2022-04-20 21:01:26
书非常的好,感谢快递小哥,疫情期间,依然很快的送到了。 书是正版,纸张不错。3月出的版,四月就买到了,高兴。
2022-04-15 22:43:46
书的内容可以
2022-04-08 14:09:57
买回来好多天了,一直忙着,还没时间看,内容暂时还不清楚,纸张印刷质量很好,包装完好有塑封,活动期间购买,比较划算,C20标准可以了解一下,
2022-04-06 00:05:34