阅读本书是学习C++语言的一种方法,通过阅读本书既能提升编码质量,又能提升编程效率。本书贯穿了对C++14新特性的讨论。这些新的C++14特性并没有分离在几个章节中,而是贯穿于全书,在有必要的情况下,几乎所有的例子都已经更新为使用这些新特性。
《C++高级编程(第3版) 不仅讲解C++语法和语言特性,还强调了编程方法学和良好的编程风格。本书讲解的方法学覆盖了整个软件开发过程——从设计和编码,到测试、调试以及团队合作。这种方法可以让你掌握C++语言及其语言的独特特性,还能够在大型软件开发中充分利用C++语言的强大功能。
想象一下如果有人学习了C++所有语法但是没有看过一个C++例子的情形。他所了解的知识会让他处于非常危险的境地。如果没有示例的引导,他可能会认为所有源代码都要放在程序的main()函数中,还有可能认为所有变量都应该为全局变量—— 这些都不是良好的编程实践。
专业的C++程序员除了理解语法外,还要正确理解语言的使用方式。他们知道良好设计的重要性、面向对象编程的理论以及使用现有库的很好方式。他们还开发了大量有用的代码并了解可重用的思想。
通过阅读和理解本书的内容,你也能成为一名专业的C++程序员。你在C++方面的知识会得到扩充,将会接触到鲜为人知的和常被误解的语言特性。你还将领略面向对象设计,掌握卓越的调试技能。最重要的或许是,通过阅读本书,你会了解到大量“可重用”思想,并将这种思想贯彻到日常工作中。
有很多好的理由让你努力成为一名专业的C++程序员,而非只是泛泛了解C++的程序员。了解语言的真正工作原理可以提升代码的质量。了解不同的编程方法学和过程可以让你更好地和团队合作。探索可重用的库和常用的设计模式可以提升你的日常工作效率,并帮助你避免白费力气地重复工作。所有这些学习课程都在帮助你成为更优秀的程序员,同时成为更有价值的雇员。尽管这本书不能保证你升职,但是肯定不会有坏处。
熟练驾驭C++语言的全新版本C++14
《C++高级编程(第3版) 是设计和构建C++应用程序的实用指南,代码丰富,并根据C++14版本做了全面更新。本书强调良好编程风格的重要性,阐述如何设计可充分利用C++语言功能的高效解决方案;深入探讨C++语言功能集的更复杂元素,并披露避开常见陷阱的技巧。本书醒目显示了新的C++14信息,使你快速了解影响应用程序构建的显著变化。
主要内容
◆ 提供富有挑战的、紧贴实用的、可供下载的示例代码段供读者学习
◆ 研究详明案例,案例中包含已在Windows和Linux上测试的丰富工作代码
◆ 列出保持良好编程风格的提示、技巧和方案,包括很好调试实践
◆ 使用C++14的全新语言功能,包括函数返回类型推断、二进制字面量、泛型lambda和lambda捕捉表达式
◆ 使用全新标准库功能,例如make_unique、透明函数对象,通过类型寻址的元组、共享mutex和锁类
本书结构
本书的正文部分包括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 [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图标,如左侧所示。
……
第I部分 专业的C++简介
第1章 C++和STL速成 3
1.1 C++基础知识 3
1.2 深入研究C++ 21
1.2.1 指针和动态内存 22
1.2.2 引用 26
1.6 本章小结 41
第2章 使用字符串 43
3.8 本章小结 66
第II部分 专业的C++软件设计
第4章 设计专业的C++程序 69
4.8 本章小结 88
第5章 面向对象设计 91
5.6 本章小结 106
第6章 设计可重用代码 107
6.1 重用哲学 107
6.3 本章小结 117
第III部分 专业的C++编码方法
第7章 熟悉类和对象 121
7.1 电子表格示例介绍 121
7.2 编写类 122
7.4 本章小结 148
第8章 掌握类与对象 149
8.7.3 重载比较运算符 176
8.7.4 创建具有运算符重载的类型 178
8.8 创建稳定的接口 178
8.9 本章小结 181
第9章 揭秘继承技术 183
9.1 使用继承构建类 183
9.1.1 扩展类 184
9.1.2 重写方法 187
9.2 使用继承重用代码 190
9.2.1 WeatherPrediction类 190
9.2.2 在派生类中添加功能 191
9.2.3 在派生类中替换功能 192
9.3 利用父类 193
9.3.1 父类构造函数 193
9.3.2 父类的析构函数 194
9.6.8 虚基类 228
9.7 本章小结 229