图书前言

前 言

该死的鱼雷!全速前进。

— 海军上将法拉格特

编程是一门艺术,它将问题的解决方案描述成计算机能够执行的形式。编程中的大部分工作都在寻找和完善解决方案。通常,只有通过编程实践,亲身经历解决问题的过程,才能深入理解要解决的问题。

本书适合那些从未接触过编程但愿意努力学习的初学者,有助于他们理解编程的原理,并掌握使用 C++ 语言的实践技能。对于有一些编程知识,但想要更深入了解编程原理和现代 C++ 的人来说,这本书也同样适用。

为什么要学习编程?我们的现代文明就建立在软件之上。如果不了解软件,就只能退化到去相信“魔法”,并无法涉及许多最有趣的、最有利可图的、对社会有用的技术领域。当我谈到编程时,我想到的是各式各样的计算机程序,从带有图形用户界面(GUI)的个人计算机应用程序,到工程计算和嵌入式系统控制应用程序(如数码相机、汽车和手机中的程序),再到在许多人文和商业应用程序中使用的文本操作应用程序。就像数学一样,编程可以是一种很棒的智力训练,可以提高思考能力。由于计算机能做出反馈,编程比大多数形式的数学更具体,因此更容易被更多人接受。编程是一种可以接触并改变世界的方式(理想情况下会让世界变得更美好)。最后,编程可以是非常有趣的。

编程有多种类型。本书旨在服务于那些需要认真编写重要程序的人群。也就是说,我假设你想要达到一定的专业水平。因此,我为本书选择的主题涵盖了开始编程实践所需的内容,而不仅仅是易于教授和学习的内容。介绍技术时,我会描述它,展示支持该技术所需的概念和语言特性,并提供相应的练习,以便你可以使用该技术来正确地完成工作。如果你只是想理解简单程序,或者编写只是调用他人提供的代码的程序,那么你所需的知识远比我在此所介绍的要少。在这种情况下,你可能更应该选择比 C++ 更简单的编程语言。另一方面,我不会用没有实际意义的材料浪费你的时间。在这里介绍的概念,都是常用的。

编程是通过编写程序来学习的。在这一点上,编程与其他实践性工作类似。你不可能仅仅通过读书就学会游泳、演奏乐器或驾驶汽车(你必须练习)。如果不阅读和编写大量代码,你也不可能学会编程。本书专注于通过文本、图表和代码示例的紧密结合,帮助你理解编程的思想、概念和原则,并掌握用于表达它们的语言结构。这是必不可少的,但仅靠它本身,并不会给你带来编程实践技能。为此,你需要进行练习,并熟悉编写、编译和运行程序的工具。你需要自己犯错,并学会改正。编写代码是不可替代的,而且这才是乐趣所在!

编程远不止遵循一些规则和阅读手册,还有更多内容。本书的侧重点并非“C++ 的语法规则”,而是运用 C++ 来阐释那些基本概念。对于一名优秀的程序员而言,理解基本的思想、原则以及技术才是最重要的。并且,“这些基础的东西”具有持久的生命力,即便在当今的编程语言和工具历经演变甚至被更替之后,它们依然不可或缺。

代码可以既美观又实用。本书旨在帮助你认识到这一点,理解代码美观的含义,并帮助你掌握 创建此类代码的原理和实践技能。最后,祝你的编程之路一帆风顺!

前版本介绍

《C++程序设计:原理与实践》第三版的篇幅大约是第二版的一半。这对于需要携带书籍的读者来说无疑是个好消息。篇幅减小的原因是在网络上能够获取到更多关于 C++ 及其标准库的信息。本书在编程课程中通常会用到的核心内容,都包含在这第三版(简称“PPP3”)中,且已更新至 C++20 标准,并包含了少许 C++23 的内容。上一版(简称“PPP2”)的第四部分旨在为读者提供在需要时可查阅的额外信息。第二版的以下内容可在网上获取:

第 1 章:计算机、人与程序设计;

第 11 章:自定义输入与输出;

第 22 章:理念与历史;

第 23 章:文本操作;

第 23 章:数值计算;

第 25 章:嵌入式系统程序设计;

第 26 章:测试;

第 27 章:C 编程语言;

术语表。

当我觉得有必要引用这些章节时,引用格式如下:PPP2.Ch22 或 PPP2.§27.1。

致谢

特别感谢那些审阅本书草稿并提出许多改进建议的人:克洛维斯·L.通多、何塞·丹尼尔·加西亚·桑切斯、J.C. 范·温克尔和维勒·沃蒂莱宁。此外,维勒·沃蒂莱宁完成了从图形用户界

面/图形接口库到 Qt 的重要映射工作,使其能够移植到众多令人惊叹的系统中。

同时,也感谢为本书第一版和第二版做出贡献的人们。他们的许多意见都反映在这第三版中。