Skip to content

Latest commit

 

History

History
136 lines (76 loc) · 9.43 KB

00.md

File metadata and controls

136 lines (76 loc) · 9.43 KB

零、前言

这本书将向读者提供关于 C++ 17 和 C++ 20 标准的 C++ 程序的细节,以及它们是如何编译、链接和执行的。它还将涵盖内存管理如何工作,内存管理问题的最佳实践是什么,什么是类以及它们是如何实现的,编译器如何优化代码,以及编译器在支持类继承、虚函数和模板方面的方法是什么。

这本书还将告诉读者如何应用内存管理、面向对象编程、并发性和设计模式来创建世界通用的生产应用。

读者将学习高效数据结构和算法的内部细节,并了解如何测量和比较它们,以选择最适合特定问题的内容。

这本书将帮助读者将系统设计技能和基本设计模式结合到 C++ 应用中。

作为奖励,这本书还介绍了人工智能世界,包括使用 C++ 编程语言的机器学习基础知识。

到本书结束时,读者应该有足够的信心使用高效的数据结构和算法来设计和构建真实世界的、可扩展的 C++ 应用。

这本书是给谁的

寻求找到与语言和程序结构相关的细节的 C++ 开发人员,或者试图通过挖掘程序的本质来设计可重用、可扩展的架构来提升自己的专业知识的开发人员,都将从这本书中受益。那些打算使用 C++ 17 和 C++ 20 的新特性设计高效数据结构和算法的开发人员也将受益。

这本书涵盖了什么

第 1 章介绍 构建 C++ 应用,包含 C++ 世界、其应用以及语言标准最新更新的介绍。本章还包括对 C++ 涵盖的主题的概述,以及对代码编译、链接和执行阶段的介绍。

第二章C++ 低级编程,重点讨论 c++ 数据类型、数组、指针以及指针寻址和操作,以及条件、循环、函数、函数指针和结构的低级细节。本章还包括对结构的介绍。

第 3 章面向对象编程的细节,深入探讨了类和对象的结构,以及编译器如何实现对象生存期。本章结束时,读者将了解继承和虚拟函数的实现细节,以及 C++ 中 OOP 的基本内部细节。

第 4 章理解和设计模板,介绍 C++ 模板、模板函数示例、模板类、模板专门化以及模板元编程的一般知识。特性和元编程将结合 C++ 应用的魔力。

第 5 章内存管理和智能指针深入探讨了内存分区、分配和一般管理的细节,包括使用智能指针来避免潜在的内存泄漏。

第六章挖掘 STL 中的数据结构和算法,介绍数据结构及其 STL 实现。本章还包括数据结构的比较,以及用真实例子讨论正确的应用。

第 7 章函数式编程重点介绍函数式编程,这是一种不同的编程范式,让读者能够专注于代码的“函数”而不是“物理”结构。掌握函数式编程为开发人员提供了一项新技能,有助于为问题提供更好的解决方案。

第 8 章并发和多线程,重点介绍如何通过利用并发来让程序运行得更快。当一个高效的数据结构和高效的算法达到程序性能的极限时,并发性就来了。

第 9 章设计并发数据结构,重点是利用数据结构和并发性设计基于锁和无锁的并发数据结构。

第 10 章设计世界就绪型应用,重点是通过使用设计模式,将从前面章节中获得的知识融入到设计健壮的现实世界应用中。本章还包括通过设计亚马逊克隆来理解和应用领域驱动设计。

第 11 章使用设计模式设计策略游戏通过使用设计模式和最佳实践,将从前面章节中获得的知识融入到策略游戏的设计中。

第 12 章联网与安全介绍了 C++ 中的网络编程,以及如何利用网络编程技巧构建 dropbox 后端克隆。这几章还包括如何确保编码最佳实践的讨论。

第 13 章、*调试和测试、*重点调试 C++ 应用和避免代码 bug 的最佳实践,应用静态代码分析以减少测试驱动开发和行为驱动开发的程序、介绍和应用中的问题。本章还讨论了行为驱动开发和 TDD 之间的区别以及用例。

第 14 章带 Qt 的图形用户界面,介绍了 Qt 库及其主要组件。本章还包括对 Qt 跨平台特性的理解,通过构建一个简单的桌面客户端继续 dropbox 示例。

第 15 章在机器学习任务中使用 C++ 的,简要介绍了人工智能的概念和该领域的最新发展。本章还包括机器学习和任务的介绍,如回归分析和聚类,以及如何建立一个简单的神经网络。

第 16 章实现基于对话的搜索引擎涉及应用前面所有章节的知识来设计被描述为基于对话的的高效搜索引擎,因为它通过询问(和学习)用户的相应问题来找到正确的文档。

充分利用这本书

基本的 C++ 经验,包括熟悉内存管理、面向对象编程以及基本的数据结构和算法,将是一个很大的优势。如果你渴望了解这个复杂的程序是如何在幕后工作的,也渴望了解 C++ 应用设计的编程概念和最佳实践的细节,那么你肯定应该继续阅读这本书。

| 书中涉及的软件/硬件 | 操作系统要求 | | g++ 编译器 | Ubuntu Linux 是一个优势,但不是一个要求 |

您还需要在您的计算机上安装 Qt 框架。详情见相关章节。

在写这本书的时候,并不是所有的 C++ 编译器都支持所有新的 C++ 20 特性,考虑使用最新版本的编译器来测试本章中介绍的更多特性。

下载示例代码文件

你可以从你在www.packt.com的账户下载这本书的示例代码文件。如果您在其他地方购买了这本书,您可以访问www.packt.com/support并注册将文件直接通过电子邮件发送给您。

您可以按照以下步骤下载代码文件:

  1. 登录或注册www.packt.com
  2. 选择“支持”选项卡。
  3. 点击代码下载和勘误表。
  4. 在搜索框中输入图书的名称,并按照屏幕指示进行操作。

下载文件后,请确保使用最新版本的解压缩文件夹:

  • 视窗系统的 WinRAR/7-Zip
  • zipeg/izp/un ARX for MAC
  • 适用于 Linux 的 7-Zip/PeaZip

这本书的代码包也托管在 https://github.com/PacktPublishing/Expert-CPP 的 GitHub 上。如果代码有更新,它将在现有的 GitHub 存储库中更新。

我们还有来自丰富的图书和视频目录的其他代码包,可在**【https://github.com/PacktPublishing/】**获得。看看他们!

下载彩色图像

我们还提供了一个 PDF 文件,其中包含本书中使用的截图/图表的彩色图像。可以在这里下载:https://static . packt-cdn . com/downloads/9781838552657 _ color images . pdf

使用的约定

本书通篇使用了许多文本约定。

CodeInText:表示文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟网址、用户输入和推特句柄。下面是一个例子:“前面的代码用预先指定的值声明了两个readonly属性。”

代码块设置如下:

Range book = 1..4;
var res = Books[book] ;
Console.WriteLine($"\tElement of array using Range: Books[{book}] => {Books[book]}");

当我们希望将您的注意力吸引到代码块的特定部分时,相关的行或项目以粗体显示:

private static readonly int num1=5;
private static readonly int num2=6;

任何命令行输入或输出都编写如下:

dotnet --info

粗体:表示一个新的术语,一个重要的单词,或者你在屏幕上看到的单词。例如,菜单或对话框中的单词像这样出现在文本中。下面是一个示例:“从管理面板中选择系统信息。”

Warnings or important notes appear like this. Tips and tricks appear like this.

取得联系

我们随时欢迎读者的反馈。

一般反馈:如果你对这本书的任何方面有疑问,在你的信息主题中提到书名,发邮件给我们customercare@packtpub.com

勘误表:虽然我们已经尽了最大的努力来保证内容的准确性,但是错误还是会发生。如果你在这本书里发现了一个错误,如果你能向我们报告,我们将不胜感激。请访问www.packt.com/submit-errata,选择您的图书,点击勘误表提交链接,并输入详细信息。

盗版:如果您在互联网上遇到任何形式的我们作品的非法拷贝,如果您能提供我们的位置地址或网站名称,我们将不胜感激。请通过copyright@packt.com联系我们,并提供材料链接。

如果你有兴趣成为一名作者:如果有一个你有专长的话题,你有兴趣写或者投稿一本书,请访问authors.packtpub.com

复习

请留下评论。一旦你阅读并使用了这本书,为什么不在你购买它的网站上留下评论呢?然后,潜在的读者可以看到并使用您不带偏见的意见来做出购买决定,我们在 Packt 可以了解您对我们产品的看法,我们的作者可以看到您对他们的书的反馈。谢谢大家!

更多关于 Packt 的信息,请访问packt.com