图书前言

前    言

  

  

  多年来,C++都是编写性能卓越、功能强大的企业级面向对象程序的事实标准语言。尽管C++语言已经风靡全球,但是这种语言却非常难完全掌握。专业C++程序员使用一些简单但高效的技术,这些技术并未出现在传统教材中;即使是经验丰富的C++程序员也不了解C++中的某些很有用的特性。

  编程书籍往往重点描述语言的语法,而不是语言在真实世界中的应用。典型的C++教材在每一章中介绍语言中的大部分知识,讲解语法并列举示例。本书不遵循这个模式。本书并不是讲解语言的大量细节并给出少量真实世界的场景,而是教你如何在真实世界中使用C++。本书还会披露一些鲜为人知的让编程更简单的特性,以及区分编程新手和专业程序员的编程技术。

本书读者对象

  就算你使用了多年的C++,仍可能不熟悉C++的一些高级特性,或者仍然不具有使用这门语言的完整能力。也许你编写过实用的C++代码,但还想学习更多有关使用C++设计和良好的编程风格的内容。也许你是C++新手,想在入门的时候就掌握“正确”的编程方式。本书能满足上述需求,能将你的C++技能提升到专业水准。

  因为本书专注于从对C++具有基本或中等了解水平蜕变为一名专业的C++程序员的过程,所以本书假设你对该语言具有一定程度的认识。第1章涵盖了C++的一些基础知识,可以当成复习材料,但是不能替代实际的语言培训和语言使用手册。如果你刚刚开始接触C++,但有很丰富的C、Java或C#语言经验,那么你应该能从第1章获得所需的大部分知识。

  不管属于那种情况,你都应该有很好的编程基础。你应该知道循环、函数和变量。你应该知道如何组织一个程序,而且应该熟悉基本技术,例如递归。你应该了解一些常见数据结构,例如哈希表和队列,以及有用的算法,例如排序和搜索。你不需要预先了解有关面向对象编程的知识——?这是第5章讲解的内容。

  你还应该熟悉开发代码时使用的编译器。本书没有提供使用具体编译器的指南。请参阅编译器自带的指南。

本书主要内容

  阅读本书是学习C++语言的一种方法,通过阅读本书既能提升编码质量,又能提升编程效率。本书贯穿了对C++14新特性的讨论。这些新的C++14特性并没有分离在几个章节中,而是贯穿于全书,在有必要的情况下,几乎所有的例子都已经更新为使用这些新特性。

  本书不仅讲解C++语法和语言特性,还强调了编程方法学和良好的编程风格。本书讲解的方法学覆盖了整个软件开发过程——从设计和编码,到测试、调试以及团队合作。这种方法可以让你掌握C++语言及其语言的独特特性,还能够在大型软件开发中充分利用C++语言的强大功能。

  想象一下如果有人学习了C++所有语法但是没有看过一个C++例子的情形。他所了解的知识会让他处于非常危险的境地。如果没有示例的引导,他可能会认为所有源代码都要放在程序的main()函数中,还有可能认为所有变量都应该为全局变量——?这些都不是良好的编程实践。

  专业的C++程序员除了理解语法外,还要正确理解语言的使用方式。他们知道良好设计的重要性、面向对象编程的理论以及使用现有库的最佳方式。他们还开发了大量有用的代码并了解可重用的思想。

  通过阅读和理解本书的内容,你也能成为一名专业的C++程序员。你在C++方面的知识会得到扩充,将会接触到鲜为人知的和常被误解的语言特性。你还将领略面向对象设计,掌握卓越的调试技能。最重要的或许是,通过阅读本书,你会了解到大量“可重用”思想,并将这种思想贯彻到日常工作中。

  有很多好的理由让你努力成为一名专业的C++程序员,而非只是泛泛了解C++的程序员。了解语言的真正工作原理可以提升代码的质量。了解不同的编程方法学和过程可以让你更好地和团队合作。探索可重用的库和常用的设计模式可以提升你的日常工作效率,并帮助你避免白费力气地重复工作。所有这些学习课程都在帮助你成为更优秀的程序员,同时成为更有价值的雇员。尽管这本书不能保证你升职,但是肯定不会有坏处。

本书结构

  本书的正文部分包括5大部分。

  第I部分是C++基础速成教程,确保读者掌握C++的基础知识。在速成教程后,第I部分深入讨论了字符串的使用,因为字符串在示例中应用广泛。第I部分的最后一章介绍如何编写清晰易读的C++代码。

  第II部分介绍C++设计方法学。你会了解到设计的重要性、面向对象方法学和代码重用的重要性。

  第III部分从专业的角度概述C++技术。你将学习如何创建可重用的类,以及如何利用重要的语言特性,例如继承。你还会学习这门语言的一些不同寻常之处、输入和输出技术、错误处理、字符串本地化和正则表达式的使用,讨论如何实现运算符重载,如何编写模板。这一部分还讲解C++标准库,包括容器、迭代器、算法。你还会学习标准中的其他一些库,例如处理时间的库和处理随机数的库。

  第IV部分讲解如何最大限度地使用C++。本书这一部分揭示了C++中神秘的部分,并且描述了如何使用这些更高级的特性。你会学习如何定制和扩充标准库以满足自己的需求、在C++中如何恰到好处地管理内存、高级模板编程的细节,包括模板元编程,以及如何通过多线程编程来充分利用多处理器和多核系统。

  第V部分重点介绍如何编写企业级质量的软件。你会学习当今编程组织使用的工程实践;C++程序的调试技术;如何编写高效的C++代码。

  本书最后是三个附录。附录A列出在C++技术面试中取得成功的指南(按章分解内容),附录B是带注解的参考文献列表,附录C则总结了标准中的C++头文件。

  本书没有列出C++中每个类、方法和函数的参考。这些参考可在互联网上获得。下面是两个很好的在线参考:

     www.cppreference.com

  可使用这个在线参考,也可以下载其离线版本,在没有连接到互联网时使用。

     www.cplusplus.com/reference/

  这些在线参考会持续更新、扩充不可能在书中出现的示例代码和新特性。

  本书有时把这个详细的C++参考称为“标准库参考”。

使用本书的条件

  要使用这本书,你只需要一台带有C++编译器的计算机。本书只关注C++中的标准部分,而没有任何编译器厂商相关的扩展。

  本书包含了C++14标准引入的新特性。在撰写本书时,大多数编译器还都不能完全支持C++14所有的新特性。

  可以使用任意C++编译器。如果还没有C++编译器,可以下载一个免费的。这有许多选择。例如,对于Windows,可以选择Microsoft Visual Studio Express 2013 for Windows Desktop,它是免费的,且包含Visual C++;对于Linux,可以使用GCC或Clang,它们也是免费的。本书的示例代码在Visual C++和GCC上均已测试通过。

Microsoft Visual C++

  首先需要创建一个项目。启动VC++,单击File | New | Project,在左边的项目模板树中选择Visual C++ | Win32,再在窗口中间的列表中选择Win32 Console Application模板。在底部指定项目的名称、保存位置,单击OK。这会打开一个向导,单击Next,选择Console application和Empty Project,再单击Finish。

  加载新项目后,就会在Solution Explorer中看到项目文件列表。如果这个停靠窗口不可见,可以选择View | Solution Explorer。在Solution Explorer中右击项目名,再选择Add | NewItem 或Add | Existing Item,就可以给项目添加新文件或已有文件。

  使用Build | Build Solution编译代码。没有编译错误后,就可以使用Debug | Start Debugging运行它。

  

  如果程序在查看输出之前就退出了,可以使用Debug | Start without Debugging。这会在程序末尾暂停,以便查看输出。

GCC

  用自己喜欢的任意文本编辑器创建源代码,保存到一个目录下。

  要编译代码,打开一个终端,运行如下命令,指定要编译的所有.cpp文件:

     gcc -lstdc++ -std=c++1y -o <executable_name><source1.cpp> [source2.cpp ...]

  -std=c++1y用于告诉GCC启用C++14支持。

  例如,可以改为使用包含代码的目录,运行如下命令来编译第1章的AirlineTicket示例:

     gcc –lstdc++ -std=c++1y -o AirlineTicket AirlineTicket.cpp AirlineTicketTest.cpp

  没有编译错误后,就可以使用如下命令运行它:

     ./AirlineTicket

约定

  为了帮助你更好地理解正文内容,全书中使用了一些约定。

  

  

  

  

  

  

  C++14标准特定的段落或章节的左侧有一个小型的C++14图标,如左侧所示。

p2p.wrox.com

  要与作者和同行讨论,请加入p2p.wrox.com上的P2P论坛。这个论坛是一个基于Web的系统,便于你张贴与Wrox图书相关的消息和相关技术,与其他读者和技术用户交流心得。该论坛提供了订阅功能,当论坛上有新的消息时,它可以给你传送感兴趣的论题。Wrox作者、编辑和其他业界专家和读者都会到这个论坛上来探讨问题。

  在http://p2p.wrox.com上,有许多不同的论坛,它们不仅有助于阅读本书,还有助于开发自己的应用程序。要加入论坛,可以遵循下面的步骤:

  (1) 进入p2p.wrox.com,单击Register链接。

  (2) 阅读使用协议,并单击Agree按钮。

  (3) 填写加入该论坛所需要的信息和自己希望提供的其他信息,单击Submit按钮。

  (4) 你会收到一封电子邮件,其中的信息描述了如何验证账户,完成加入过程。

  

  

  

  

  加入论坛后,就可以张贴新消息,响应其他用户张贴的消息。可以随时在Web上阅读消息。如果要让该网站给自己发送特定论坛中的消息,可以单击论坛列表中该论坛名旁边的Subscribe to this Forum图标。

  关于使用Wrox P2P的更多信息,可阅读P2P FAQ,了解论坛软件的工作情况以及P2P和Wrox图书的许多常见问题。要阅读FAQ,可以在任意P2P页面上单击FAQ链接。

勘误表

  尽管我们已经尽了各种努力来保证文章或代码中不出现错误,但是错误总是难免的,如果你在本书中找到了错误,例如拼写错误或代码错误,请告诉我们,我们将非常感激。通过勘误表,可以让其他读者避免受挫,当然,这还有助于提供更高质量的信息。

  请给wkservice@vip.163.com发电子邮件,我们就会检查你的信息,如果是正确的,我们将在本书的后续版本中采用。

  要在网站上找到本书的勘误表,可以登录http://www.wrox.com,通过Search工具或书名列表查找本书,然后在本书的细目页面上,单击Book Errata链接。在这个页面上可以查看到Wrox编辑已提交和粘贴的所有勘误项。完整的图书列表还包括每本书的勘误表,网址是www.wrox.com/misc-pages/booklist.shtml。

源代码

  读者在学习本书中的示例时,可以手动输入所有的代码,也可以使用本书附带的源代码文件。本书使用的所有源代码都可以从本书合作站点http://www.wrox.com/go/proc++3e下载。

  另外,也可以进入http://www.wrox.com/dynamic/books/download.aspx上的Wrox代码下载主页,查看本书和其他Wrox图书的所有代码。

  还可以访问www.tupwk.com.cn/downpage,输入中文版ISBN或中文书名来下载源代码。

  

  

  

  

  下载代码后,只需用自己喜欢的解压缩软件对它进行解压缩即可。

  

C++高级编程(第3版)

  

前    言

  

  VIII

  

  

  IX