Skip to content

Latest commit

 

History

History
148 lines (91 loc) · 10.7 KB

File metadata and controls

148 lines (91 loc) · 10.7 KB

零、前言

C++ 是一种有趣的编程语言,已经存在了将近 30 年。它用于使用第三方小部件框架开发复杂的桌面应用、web 应用、网络应用、设备驱动程序、内核模块、嵌入式应用和 GUI 应用;从字面上讲,C++ 可以用于任何领域。

自从我 1993 年开始编程以来,我一直珍惜与我不时遇到的许多同事和行业专家进行的良好的旧技术讨论。在所有的技术讨论中,有一个话题得到了一次又一次的重复,那就是:“你认为 C++ 是当今一种相关的编程语言吗?我应该继续研究 C++ 还是应该转向其他现代编程语言,如 Java、C#、Scala 或 Angular/Node.js?”

我一直觉得一个人应该对学习其他技术持开放态度,但这并不意味着必须放弃 C++。然而,好消息是,随着新的 C++ 17 特性的到位,C++ 已经重生,它将在未来的几十年里保持不变,这也是我写这本书的动机。

人们一直觉得 Java 会接管 C++,但一直持续不变。当 C#进入这个行业时,同样的讨论又开始了,今天,当 Angular/Node.js 和 Scala 似乎对快速编程更有吸引力时,讨论又开始了。然而,C++ 有它自己的位置,到目前为止,没有任何编程语言能够取代 C++ 的位置。

已经有很多 C++ 书籍可以帮助你理解这种语言,但是很少有书籍涉及用 C++ 开发 GUI 应用,用 C++ 开发 TDD,用 C++ 开发 BDD。

C++ 已经走过了很长的路,现在已经在几个环境中被采用。它的主要优势是其软件基础设施和资源受限的应用。C++ 17 版本将改变开发人员编写代码的方式,本书将帮助您掌握使用 C++ 开发的技巧。

通过解释每个概念的真实例子,本书将首先向您介绍 C++ 17 的最新特性。它将鼓励 C++ 中的整洁的代码实践,并展示 C++ 中的图形用户界面应用开发选项。您将深入了解如何使用智能指针来避免内存泄漏。接下来,您将学习多线程编程如何帮助您在应用中实现并发。

接下来,您还将深入了解 C++ 标准模板库。我们将解释在您的 C++ 程序中实现 TDD 和 BDD 的概念,以及基于模板的泛型编程,以使您具备构建强大应用的专业知识。最后,我们将用调试技术和最佳实践来充实这本书。当你读完这本书的时候,你会对这门语言及其各个方面有一个深入的了解。

这本书涵盖了什么

第 1 章C++ 17 特性,解释了 C++ 17 的新特性以及已经移除的特性。它还通过易于理解的示例演示了 C++ 17 的关键特性。

第 2 章标准模板库,给出了 STL 的概述,演示了各种容器和迭代器,并解释了如何在容器上应用有用的算法。本章还涉及所使用的内部数据结构及其运行时效率。

第三章模板编程,概述了泛型编程及其好处。它演示了如何编写函数模板和类模板,以及如何重载函数模板。它还涉及到编写泛型类、显式类专门化和部分专门化。

第 4 章智能指针,解释了使用原始指针的问题,并激发了智能指针的使用。本章逐步向您介绍 auto_ptr、unique_ptr、shared_ptr 和 weak_ptr 的用法,并解释解决循环依赖问题的方法。

第 5 章用 C++ 开发 GUI 应用,概述了 Qt,并为您提供了在 Linux 和 Windows 上安装 Qt 的分步说明。这一章逐步帮助您开发令人印象深刻的图形用户界面应用,具有有趣的小部件和各种布局。

第 6 章多线程编程和进程间通信,介绍了 POSIX pthreads 库并讨论了原生 C++ 线程库。它还讨论了使用 C++ 线程库的好处。稍后,它将帮助您编写多线程应用,探索管理线程的方法,并解释同步机制的使用。本章讨论了死锁和可能的解决方案。在本章的最后,它向您介绍了并发库。

第 7 章测试驱动开发,对 TDD 进行了简要概述,澄清了 TDD 的常见问题。本章为您提供了安装谷歌测试框架并将其与 Linux 和 Windows 平台集成的分步说明。它帮助您使用易于理解的教程风格开发应用。

第 8 章行为驱动开发,给出了 BDD 的概述,并指导您在 Linux 平台上完成黄瓜框架的安装、集成和配置。它还解释了小黄瓜,并帮助您编写 BDD 测试用例。

第 9 章调试技术,讨论了行业内为调试您的应用问题所遵循的各种策略和技术。稍后,它将帮助您了解如何使用 GDB 和 Valgrind 工具进行逐步调试、观察变量、修复各种与内存相关的问题,包括内存泄漏。

第 10 章代码异味和整洁的代码实践,讨论了各种代码异味和重构技术。

这本书你需要什么

在开始阅读本书之前,您需要配备以下工具:

  • 版本 5.4.0 20160609 或更高版本的 g++ 编译器
  • GDB
  • 瓦尔格林德 3.11.0
  • 黄瓜-cpp Git 2.7.4
  • 谷歌测试框架(gtest 1.6 或更高版本)
  • CMake 3.5.1
  • Ruby 2.5.1
  • Qt 5.7.0
  • Bundler 诉 1.14.6

所需的操作系统是 Ubuntu 16.04 64 位或更高版本。硬件配置至少应为 1 GB 内存和 20 GB 只读存储器。具有这种配置的虚拟机也应该足够了。

这本书是给谁的

这本书是给有经验的 C++ 开发人员看的。如果你是一个 C++ 开发新手,那么强烈建议你在阅读这本书之前先对 C++ 语言有一个扎实的了解。

约定

在这本书里,你会发现许多区分不同种类信息的文本样式。以下是这些风格的一些例子和对它们的意义的解释。文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、伪 URL、用户输入和 Twitter 句柄如下所示:“方法initialize()deque迭代器pos初始化为存储在deque中的第一个数据元素。”

代码块设置如下:

#include <iostream>

int main ( ) {

        const int x = 5, y = 5;

        static_assert ( 1 == 0, "Assertion failed" );
        static_assert ( 1 == 0 );
        static_assert ( x == y );

        return 0;
}

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

#include <iostream>
#include <thread>
#include <mutex>
#include "Account.h"
using namespace std;

enum ThreadType {
  DEPOSITOR,
  WITHDRAWER
};

mutex locker;

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

g++ main.cpp -std=c++ 17
./a.out

新名词重要词语以粗体显示。您在屏幕上看到的单词(例如,在菜单或对话框中)会出现在文本中,如下所示:“您需要通过导航到“新建项目| Visual Studio | Windows | Win32 | Win32 控制台应用”来创建一个名为 MathApp 的新项目。”

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

读者反馈

我们随时欢迎读者的反馈。让我们知道你对这本书的看法——你喜欢或不喜欢什么。读者反馈对我们来说很重要,因为它有助于我们开发出你真正能从中获益的标题。要给我们发送一般反馈,只需发送电子邮件feedback@packtpub.com,并在您的邮件主题中提及书名。如果您对某个主题有专业知识,并且对写作或投稿感兴趣,请参见我们位于www.packtpub.com/authors的作者指南。

客户支持

现在,您已经自豪地拥有了一本书,我们有许多东西可以帮助您从购买中获得最大收益。

下载示例代码

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

  1. 使用您的电子邮件地址和密码登录或注册我们的网站。
  2. 将鼠标指针悬停在顶部的“支持”选项卡上。
  3. 点击代码下载和勘误表。
  4. 在搜索框中输入图书的名称。
  5. 选择要下载代码文件的书籍。
  6. 从您购买这本书的下拉菜单中选择。
  7. 点击代码下载。

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

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

这本书的代码包也托管在 GitHub 上https://GitHub . com/packt publishing/Mastering-Cpp-Programming。我们还有来自丰富的图书和视频目录的其他代码包,可在https://github.com/PacktPublishing/获得。看看他们!

正误表

尽管我们尽了最大努力来确保我们内容的准确性,但错误还是会发生。如果你在我们的某本书里发现一个错误,也许是文本或代码中的错误,如果你能向我们报告,我们将不胜感激。通过这样做,你可以让其他读者免受挫折,并帮助我们改进这本书的后续版本。如果您发现任何勘误表,请访问http://www.packtpub.com/submit-errata,选择您的书籍,点击勘误表提交表格链接,并输入您的勘误表的详细信息。一旦您的勘误表得到验证,您的提交将被接受,勘误表将上传到我们的网站或添加到该标题勘误表部分下的任何现有勘误表列表中。要查看之前提交的勘误表,请前往https://www.packtpub.com/books/content/support并在搜索栏中输入图书名称。所需信息将出现在勘误表部分。

海盗行为

在互联网上盗版受版权保护的材料是一个贯穿所有媒体的持续问题。在 Packt,我们非常重视版权和许可证的保护。如果您在互联网上遇到任何形式的我们作品的非法拷贝,请立即向我们提供位置地址或网站名称,以便我们寻求补救。请通过copyright@packtpub.com联系我们,获取疑似盗版资料的链接。我们感谢您在保护我们的作者方面的帮助,以及我们为您带来有价值内容的能力。

问题

如果您对本书的任何方面有问题,可以在questions@packtpub.com联系我们,我们将尽最大努力解决问题。