图书前言

前    言

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

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

本书读者对象

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

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

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

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

本书主要内容

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

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

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

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

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

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

本书结构

本书的正文部分包括四个部分,另有三个附录。

第I部分是一个C++基础速成教程,确保读者掌握C++的基础知识。在速成教程之后,第I部分介绍了C++设计方法学。您会了解到设计的重要性、面向对象方法学、代码重用的重要性以及如何编写清晰易读的C++代码。

第II部分从专业的角度概述C++技术。您将学习如何创建可重用的类,以及如何利用重要的语言特性,例如继承。您还会学习这个语言的一些不同寻常之处、输入和输出技术、专业级别的错误处理以及字符串和正则表达式的使用。这一部分还讲解了C++标准库,包括容器、迭代器、算法以及如何定制和扩充标准库以满足自己的需求。您还会学习标准中其他一些库,例如处理时间的库和处理随机数的库。

第III部分讲解如何最大限度地使用C++。本书这一部分揭示了C++中神秘的部分,并且描述了如何使用这些更高级的特性。您会学习在C++中如何恰到好处地管理内存、如何实现高级的运算符重载、如何编写模板以及如何通过多线程编程来充分利用多处理器和多核系统。

第IV部分重点介绍如何编写企业级质量的软件。您会学习当今编程组织使用的工程实践;软件测试概念,例如单元测试和回归测试;C++程序的调试技术;如何编写高效的C++代码;跨语言和跨平台编程的解决方案;以及如何在代码中综合使用设计技术、框架和概念性的面向对象设计模式。

本书最后是三个附录。附录A列出在C++技术面试中取得成功的指南(按章分解内容),附录B是带注解的参考文献列表,附录C则总结了标准中的C++头文件。在本书网站www.wrox.com上的补充材料中可以找到一份实用的C++标准库参考指南。这个参考指南在本书中称为“网站上的标准库参考资源”。

使用本书的条件

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

本书包含了C++11标准引入的新特性。在撰写本书的时候,还没有编译器能支持C++11所有的新特性。本书通过运行在Linux上的GCC 4.6和运行在Windows上的 Microsoft Visual C++ 2010测试所有示例代码。GCC 4.6支持很多新特性,但并非能支持所有的新特性。使用了以下C++11特性的例子不能通过当前的GCC 4.6进行测试:

● final和override关键字

● 用户定义的文本

● 类内非静态数据成员的初始化

● 模板别名

● 构造函数委托

● 构造函数继承

本书用于测试的第二个编译器是 Microsoft Visual C++ 2010,然而,这个编译器支持的C++11特性比GCC 4.6还少。VC++ 2010中缺少的特性主要包括基于范围的for循环、统一初始化、可变参数模板以及线程库等。

约定 

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

源代码

在读者学习本书中的示例时,可以手动输入所有的代码,也可以使用本书附带的源代码文件。本书使用的所有源代码都可以从本书合作站点http://www.wrox.com/或http://www.tupwk.com.cn/ downpage上下载。登录到站点http://www.wrox.com/,使用Search工具或使用书名列表就可以找到本书。接着单击本书细目页面上的Download Code链接,就可以获得所有源代码。

在下载了代码后,只需用自己喜欢的解压缩软件对它进行解压缩即可。另外,也可以进入http://www.wrox.com/dynamic/books/download.aspx上的Wrox代码下载主页,查看本书和其他Wrox图书的所有代码。

勘误表

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

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

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

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链接。