C++程序设计语言(第1~3部分)(原书第4版)
作者 : (美)本贾尼·斯特劳斯特鲁普 (Bjarne Stroustrup)著
译者 : 王刚 杨巨峰 译
丛书名 : 计算机科学丛书
出版日期 : 2016-07-07
ISBN : 978-7-111-53941-4
定价 : 139.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 748
开本 : 16
原书名 : The C++ Programming Language, Fourth Edition
原出版社: Pearson Education Asia
属性分类: 教材
包含CD :
绝版 :
图书简介

本书是C++领域最经典的参考书。介绍了C++11的各项新特性、功能等。主要内容包括C++的类型、对象、作用域、存储、计算基础及模块化知识,命名空间、源文件以及异常处理等;C++的抽象性,包括类、类继承、模版等;标准库,包括容器、算法、迭代器、字符串、流I/O以及C++的基本内存模型等。

图书特色

C++语言之父的经典名著之最新版本,全面掌握标准C++11及其编程技术的权威指南!
第1版1985年,第2版1991年,第3版1997年,特别版2000年,第4版2013年,经典无限延伸……

本书是在C++语言和程序设计领域具有深远影响、畅销不衰的经典著作,由C++语言的设计者和最初的实现者Bjarne Stroustrup编写,对C++语言进行了最全面、最权威的论述,覆盖标准C++以及由C++所支持的关键编程技术和设计技术。本书英文原版一经面世,即引起业内人士的高度评价和热烈欢迎,先后被翻译成德、希、匈、西、荷、法、日、俄、中、韩等近20种语言,数以百万计的程序员从中获益,是无可取代的C++经典力作。
新的C++11标准使得程序员能以更清晰、更简明、更直接的方式表达思想,从而编写出更快速和高效的代码。在最新出版的第4版中,Stroustrup博士针对最新的C++11标准,为所有希望更有效使用C++语言编程的程序员重新组织、扩展和全面重写了这本C++语言的权威参考书和学习指南,细致、全面、综合地阐述了C++语言及其基本特性、抽象机制、标准库和关键设计技术。

新的C++11标准的内容包括
支持并发处理。
正则表达式、资源管理指针、随机数、改进的容器(包括哈希表)以及其他很多特性。
通用和一致的初始化机制、更简单的for语句、移动语义、基础的Unicode支持。
lambda表达式、通用常量表达式、控制类缺省定义的能力、可变参数模板、模板别名、用户定义的字面值常量。
兼容性问题。

本贾尼·斯特劳斯特鲁普
(Bjarne Stroustrup)
C++语言的设计者和最初实现者,C++语言ISO标准化工作的积极参与者,同时也是《C++程序设计语言》和《C++程序设计原理与实践》的作者。他是英国剑桥大学计算机科学专业博士,1979年加入美国新泽西贝尔实验室,从成立到2002年一直担任贝尔实验室大规模程序设计研究部门的负责人。2002年至2014年,Bjarne被评为德州农工大学工程学院计算机科学首席教授,哥伦比亚大学计算机科学系客座教授,德州农工大学计算机科学系杰出研究教授。多年来,他为剑桥大学、哥伦比亚大学和普林斯顿大学等知名学府的计算机科学教学事业倾注了大量的热情和精力。商业领域方面,Bjarne是RollApp 科技公司的资深顾问。2014年,Bjarne加入摩根士丹利纽约总部,任职技术与数据部门的董事总经理。他是美国国家工程院院士、IEEE会士和ACM会士,研究兴趣包括分布式系统设计、程序设计技术、软件开发工具和程序设计语言。


C++语言程序设计三部曲

C++程序设计语言(第1~3部分)
(原书第4版)
作者:本贾尼·斯特劳斯特鲁普
译者:王刚 杨巨峰
ISBN:978-7-111-53941-4
定价:139.00元

C++程序设计语言(第4部分)
(原书第4版)
中文版即将出版

C++程序设计原理与实践(第2版)
中文版即将全新出版

C++语言导学
作者:Bjarne Stroustrup
译者:杨巨峰 王刚
ISBN:978-7-111-49812-4
定价:39.00元

图书前言

所有计算机科学问题,
都可以通过引入一个新的间接层次来解决,
那些已有过多间接层次的问题除外。
——David J. Wheeler

与C++98标准相比,C++11标准让我可以更清晰、更简洁而且更直接地表达自己的想法。而且,新版本的编译器可以对程序进行更好的检查并生成更快的目标程序。因此,C++11给人的感觉就像是一种新语言一样。
在本书中,我追求完整性(completeness)。我会介绍专业程序员可能需要的每个语言特性和标准库组件。对每个特性或组件,我将给出:
基本原理:设计这个特性(组件)是为了帮助解决哪类问题?其设计原理是什么?它有什么根本的局限?
规范:它该如何定义?我将以专业程序员为目标读者来选择内容的详略程度,对于要求更高的C++语言研究者,有很多ISO标准的文献可供查阅。
例子:当单独使用这个特性或与其他特性组合使用时,如何用好它?其中的关键技术和习惯用法是怎样的?在程序的可维护性和性能方面是否有一些隐含的问题?
多年来,无论是C++语言本身还是它的使用,都已经发生了巨大改变。从程序员的角度,大多数改变都属于语言的改进。与之前的版本相比,当前的ISO C++标准(ISO/IEC 14882-2011,通常称为C++11)在编写高质量代码方面无疑是一个好得多的工具。但是它好在哪里?现代C++语言支持什么样的程序设计风格和技术?这些技术靠哪些语言特性和标准库特性来支撑?精练、正确、可维护性好、性能高的C++代码的基本构建单元是怎样的?本书将回答这些关键问题。很多答案已经不同于1985、1995或2005等旧版本的C++语言了:C++在进步。
C++是一种通用程序设计语言,它强调富类型、轻量级抽象的设计和使用。C++特别适合开发资源受限的应用,例如可在软件基础设施中发现的那些应用。那些花费时间学习高质量代码编写技术的程序员将会从C++语言受益良多。C++是为那些严肃对待编程的人而设计的。人类文明已经严重依赖软件,编写高质量的软件非常重要。
目前已经部署的C++代码达到数十亿行,因此程序稳定性备受重视——很多1985年和1995年编写的C++代码仍然运行良好,而且还会继续运行几十年。但是,对所有这些应用程序,都可以用现代C++语言写出更好的版本;如果你墨守成规,将来写出的代码将会是低质量、低性能的。对稳定性的强调还意味着,你现在遵循标准写出的代码,在未来几十年中会运行良好。本书中所有代码都遵循2011 ISO C++标准。
本书面向三类读者:
想知道最新的ISO C++标准都提供了哪些新特性的C++程序员。
好奇C++到底提供了哪些超越C语言的特性的C程序员。
具备Java、C#、Python和Ruby等编程语言背景,正在探寻“更接近机器”的语言,即更灵活、提供更好的编译时检查或是更好性能的语言的程序员。
自然,这三类读者可能是有交集的——一个专业软件开发者通常掌握多门编程语言。
本书假定目标读者是程序员。如果你想问“什么是for循环?”或是“什么是编译器?”,那么本书现在还不适合你,我向你推荐我的另一本书《C++程序设计原理与实践》,这本书适合作为程序设计和C++语言的入门书籍。而且,我假定读者是较为成熟的软件开发者。如果你的问题是“为什么要费力进行测试?”或者认为“所有语言基本都是一样的,给我看语法就可以了”,甚至确信存在一种适合所有任务的完美语言,那么本书也不适合你。
相对于C++98,C++11提出了哪些改进和新特性呢?适合现代计算机的机器模型会涉及大量并发处理。为此,C++11提供了用于系统级并行编程(如使用多核)的语言和标准库特性。C++11还提供了正则表达式处理、资源管理指针、随机数、改进的容器(包括哈希表)以及其他很多特性。此外,C++11还提供了通用和一致的初始化机制、更简单的for语句、移动语义、基础的Unicode支持、lambda表达式、通用常量表达式、控制类缺省定义的能力、可变参数模板、用户定义的字面值常量和其他很多新特性。请记住,这些标准库和语言特性的目标就是支撑那些用来开发高质量软件的程序设计技术。这些特性应该组合使用——将它们看作盖大楼的砖,而不应该相互隔离地单独使用来解决特定问题。计算机是一种通用机器,而C++在其中起着重要作用。特别是,C++的设计目标就是足够灵活和通用,以便处理那些连它的设计者都未曾想象过的未来难题。
致谢
除了本书上一版致谢提及的人之外,我还要感谢Pete Becker、Hans-J. Boehm、Marshall Clow、Jonathan Coe、Lawrence Crowl、Walter Daugherty、J. Daniel Garcia、Robert Harle、Greg Hickman、Howard Hinnant、Brian Kernighan、Daniel Krügler、Nevin Liber、Michel Michaud、Gary Powell、Jan Christiaan van Winkel和Leor Zolman。没有他们的帮助,本书的质量要差得多。
感谢Howard Hinnant为我解答很多有关标准库的问题。
Andrew Sutton是Origin库的作者,模板相关章节中很多模拟概念的讨论都是基于这个测试平台的。他还是Matrix库的作者,这是第29章的主题。Origin库是开源的,在互联网上搜索“Origin”和“Andrew Sutton”就能找到。
感谢我指导的毕业设计班,他们从第一部分中找出的问题比其他任何人都多。
假如我能遵照审阅人的所有建议,毫无疑问会大幅度提高本书的质量,但篇幅上也会增加数百页。每个专家审阅人都建议增加技术细节、进阶示例和很多有用的开发规范;每个新手审阅人(或教育工作者)都建议增加示例;而大多数审阅人都(正确地)注意到本书的篇幅可能过长了。
感谢普林斯顿大学计算机科学系,特别感谢Brian Kernighan教授,在我利用部分休假时间撰写此书时给予我热情接待。
感谢剑桥大学计算机实验室,特别感谢Andy Hopper教授,在我利用部分休假时间撰写此书时给予我热情接待。
感谢我的编辑Peter Gordon以及他在Addison-Wesley的出版团队,感谢你们的帮助和耐心。

Bjarne Stroustrup
于得克萨斯大学城

上架指导

计算机\程序设计

封底文字

C++语言之父的经典名著之最新版本,全面掌握标准C++11及其编程技术的权威指南!
第1版1985年,第2版1991年,第3版1997年,特别版2000年,第4版2013年,经典无限延伸……

本书是在C++语言和程序设计领域具有深远影响、畅销不衰的经典著作,由C++语言的设计者和最初的实现者Bjarne Stroustrup编写,对C++语言进行了最全面、最权威的论述,覆盖标准C++以及由C++所支持的关键编程技术和设计技术。本书英文原版一经面世,即引起业内人士的高度评价和热烈欢迎,先后被翻译成德、希、匈、西、荷、法、日、俄、中、韩等近20种语言,数以百万计的程序员从中获益,是无可取代的C++经典力作。

新的C++11标准使得程序员能以更清晰、更简明、更直接的方式表达思想,从而编写出更快速和高效的代码。在最新出版的第4版中,Stroustrup博士针对最新的C++11标准,为所有希望更有效使用C++语言编程的程序员重新组织、扩展和全面重写了这本C++语言的权威参考书和学习指南,细致、全面、综合地阐述了C++语言及其基本特性、抽象机制、标准库和关键设计技术。

新的C++11标准的内容包括:
 支持并发处理。
 正则表达式、资源管理指针、随机数、改进的容器(包括哈希表)以及其他很多特性。
 通用和一致的初始化机制、更简单的for语句、移动语义、基础的Unicode支持。
 lambda表达式、通用常量表达式、控制类缺省定义的能力、可变参数模板、模板别名、用户定义的字面值常量。
 兼容性问题。

本贾尼•斯特劳斯特卢普(Bjarne Stroustrup) C++语言的设计者和最初实现者,C++语言ISO标准化工作的积极参与者,同时也是《C++程序设计语言》和《C++程序设计原理与实践》的作者。他是英国剑桥大学计算机科学专业博士,1979年加入美国新泽西贝尔实验室,从成立到2002年一直担任贝尔实验室大规模程序设计研究部门的负责人。2002~2014年,Bjarne 被评为德州农工大学工程学院计算机科学首席教授,哥伦比亚大学计算机科学系客座教授,德州农工大学计算机科学系杰出研究教授。多年来,他为剑桥大学、哥伦比亚大学和普林斯顿大学等知名学府的计算机科学教学事业倾注了大量的热情和精力。商业领域方面,Bjarne 是RollApp 科技公司的资深顾问。2014年,Bjarne加入摩根士丹利纽约总部,任职技术与数据部门的董事总经理。他是美国国家工程院院士、IEEE会士和ACM会士,研究兴趣包括分布式系统、设计、程序设计技术、软件开发工具和程序设计语言。

译者简介

王刚 杨巨峰 译:暂无简介

译者序

历时近两年,终于翻译完了《C++程序设计语言》(原书第4版)。全书包含44章,英文原版共有1300多页,是C++语言之父Bjarne Stroustrup的一部呕心沥血之作。
这部巨著有几个特点:
一是知识结构完整,对C++语言的介绍非常全面。作者按照“基本功能”→“抽象机制”→“标准库”的递进层次组织全书,由浅入深地把C++语言的方方面面呈现在读者的面前。各种水平、各种背景的读者都能在书中找到适合自己的切入点和学习路径。
二是对细节的讲解非常深入,有利于读者了解和掌握语言的精华。作为C++语言的发明者和主要维护者,Bjarne Stroustrup在撰写本书时绝不仅仅满足于阐明语法和知识点本身。他试图向读者揭示各个语言功能的设计初衷,以及他对各种制约因素是如何考虑并妥协的。对于大多数读者来说,这种视角新奇而有趣。他们不再只是被动的学习者,在知道了“是什么”和“为什么”之后,还可以大胆地揣测“C++语言接下来该如何继续发展”。不得不说,这是本书与其他C++书籍的最大区别。
三是作者在写作中融入了很多自己的工程实践经验。学习程序设计语言与学习文化课有很大的不同。设计程序的过程是一门艺术,程序语言只是完成艺术作品所需的工具。举个例子来说,由于各种各样的原因,在C++中存在一些语言特性,它们的功能和作用非常类似。那么这些特性之间是何关系?在遇到某类实际问题时应该如何聪明地选择?本书很好地回答了此类问题。
以译者的浅见,程序员应该是艺术家(Artist),而非匠人(Worker)——后者只会堆砌代码,而前者能创造出美好的作品。这也应该是Bjarne Stroustrup写作本书时所追求的吧!
这本译著的出版凝结了很多人的智慧和心血,绝非译者二人独力可为。感谢机械工业出版社的朱劼、关敏等编辑在本书译校和出版过程中的辛勤付出,她们给予了我们很多无私的帮助。由于译者水平有限,书中难免有一些不当之处,恳请读者不吝批评指正。

译者
2016年春于南开园

图书目录

出版者的话
译者序
前言
第3版前言
第2版前言
第1版前言
第一部分 引言
第1章 致读者 2
1.1 本书结构 2
1.1.1 引言 2
1.1.2 基本特性 3
1.1.3 抽象机制 4
1.1.4 标准库 5
1.1.5 例子和参考文献 5
1.2 C++的设计 7
1.2.1 程序设计风格 8
1.2.2 类型检查 11
1.2.3 C兼容性 12
1.2.4 语言、库和系统 12
1.3 学习C++ 14
1.3.1 用C++编程 15
1.3.2 对C++程序员的建议 16
1.3.3 对C程序员的建议 16
1.3.4 对Java程序员的建议 17
1.4 C++的历史 18
1.4.1 大事年表 19
1.4.2 早期的C++ 19
1.4.3 1998标准 21
1.4.4 2011标准 23
1.4.5 C++的用途 26
1.5 建议 27
1.6 参考文献 28
第2章 C++概览:基础知识 32
2.1 引言 32
2.2 基本概念 33
2.2.1 Hello,World! 33
2.2.2 类型、变量和算术运算 34
2.2.3 常量 36
2.2.4 检验和循环 37
2.2.5 指针、数组和循环 38
2.3 用户自定义类型 40
2.3.1 结构 41
2.3.2 类 42
2.3.3 枚举 43
2.4 模块化 44
2.4.1 分离编译 45
2.4.2 名字空间 46
2.4.3 错误处理 47
2.5 附记 50
2.6 建议 50
第3章 C++概览:抽象机制 51
3.1 引言 51
3.2 类 51
3.2.1 具体类型 52
3.2.2 抽象类型 56
3.2.3 虚函数 58
3.2.4 类层次 59
3.3 拷贝和移动 62
3.3.1 拷贝容器 63
3.3.2 移动容器 64
3.3.3 资源管理 66
3.3.4 抑制操作 66
3.4 模板 67
3.4.1 参数化类型 67
3.4.2 函数模板 69
3.4.3 函数对象 69
3.4.4 可变参数模板 71
3.4.5 别名 72
3.5 建议 73
第4章 C++概览:容器与算法 74
4.1 标准库 74
4.1.1 标准库概述 75
4.1.2 标准库头文件与名字空间 75
4.2 字符串 77
4.3 I/O流 78
4.3.1 输出 78
4.3.2 输入 79
4.3.3 用户自定义类型的I/O 80
4.4 容器 81
4.4.1 vector 81
4.4.2 list 84
4.4.3 map 85
4.4.4 unordered_map 86
4.4.5 容器概述 86
4.5 算法 87
4.5.1 使用迭代器 88
4.5.2 迭代器类型 90
4.5.3 流迭代器 91
4.5.4 谓词 93
4.5.5 算法概述 93
4.5.6 容器算法 94
4.6 建议 94
第5章 C++概览:并发与实用功能 96
5.1 引言 96
5.2 资源管理 96
5.2.1 unique_ptr与shared_ptr 97
5.3 并发 99
5.3.1 任务和thread 99
5.3.2 传递参数 100
5.3.3 返回结果 100
5.3.4 共享数据 101
5.3.5 任务通信 103
5.4 小工具组件 106
5.4.1 时间 106
5.4.2 类型函数 107
5.4.3 pair和tuple 109
5.5 正则表达式 110
5.6 数学计算 111
5.6.1 数学函数和算法 111
5.6.2 复数 111
5.6.3 随机数 112
5.6.4 向量算术 113
5.6.5 数值限制 113
5.7 建议 114
第二部分 基本功能
第6章 类型与声明 116
6.1 ISO C++标准 116
6.1.1 实现 117
6.1.2 基本源程序字符集 118
6.2 类型 118
6.2.1 基本类型 119
6.2.2 布尔值 119
6.2.3 字符类型 121
6.2.4 整数类型 124
6.2.5 浮点数类型 126
6.2.6 前缀和后缀 127
6.2.7 void 128
6.2.8 类型尺寸 128
6.2.9 对齐 130
6.3 声明 131
6.3.1 声明的结构 133
6.3.2 声明多个名字 134
6.3.3 名字 134
6.3.4 作用域 136
6.3.5 初始化 138
6.3.6 推断类型:auto和decltype() 141
6.4 对象和值 144
6.4.1 左值和右值 144
6.4.2 对象的生命周期 145
6.5 类型别名 146
6.6 建议 147
第7章 指针、数组与引用 148
7.1 引言 148
7.2 指针 148
7.2.1 void* 149
7.2.2 nullptr 150
7.3 数组 150
7.3.1 数组的初始化器 152
7.3.2 字符串字面值常量 152
7.4 数组中的指针 155
7.4.1 数组漫游 156
7.4.2 多维数组 158
7.4.3 传递数组 159
7.5 指针与const 161
7.6 指针与所有权 163
7.7 引用 163
7.7.1 左值引用 164
7.7.2 右值引用 167
7.7.3 引用的引用 169
7.7.4 指针与引用 170
7.8 建议 172
第8章 结构、联合与枚举 173
8.1 引言 173
8.2 结构 173
8.2.1 struct的布局 175
8.2.2 struct的名字 176
8.2.3 结构与类 177
8.2.4 结构与数组 178
8.2.5 类型等价 180
8.2.6 普通旧数据 180
8.2.7 域 182
8.3 联合 183
8.3.1 联合与类 185
8.3.2 匿名union 186
8.4 枚举 188
8.4.1 enum class 188
8.4.2 普通的enum 191
8.4.3 未命名的enum 192
8.5 建议 193
第9章 语句 194
9.1 引言 194
9.2 语句概述 194
9.3 声明作为语句 195
9.4 选择语句 196
9.4.1 if语句 196
9.4.2 switch语句 198
9.4.3 条件中的声明 200
9.5 循环语句 201
9.5.1 范围for语句 201
9.5.2 for语句 202
9.5.3 while语句 203
9.5.4 do语句 203
9.5.5 退出循环 204
9.6 goto语句 204
9.7 注释与缩进 205
9.8 建议 207
第10章 表达式 208
10.1 引言 208
10.2 一个桌面计算器示例 208
10.2.1 分析器 209
10.2.2 输入 213
10.2.3 底层输入 216
10.2.4 错误处理 217
10.2.5 驱动程序 217
10.2.6 头文件 218
10.2.7 命令行参数 218
10.2.8 关于风格 220
10.3 运算符概述 220
10.3.1 结果 224
10.3.2 求值顺序 224
10.3.3 运算符优先级 225
10.3.4 临时对象 226
10.4 常量表达式 227
10.4.1 符号化常量 229
10.4.2 常量表达式中的const 229
10.4.3 字面值常量类型 229
10.4.4 引用参数 230
10.4.5 地址常量表达式 231
10.5 隐式类型转换 231
10.5.1 提升 231
10.5.2 类型转换 232
10.5.3 常用的算术类型转换 234
10.6 建议 235
第11章 选择适当的操作 236
11.1 其他运算符 236
11.1.1 逻辑运算符 236
11.1.2 位逻辑运算符 236
11.1.3 条件表达式 238
11.1.4 递增与递减 238
11.2 自由存储 240
11.2.1 内存管理 241
11.2.2 数组 243
11.2.3 获取内存空间 244
11.2.4 重载new 245
11.3 列表 247
11.3.1 实现模型 248
11.3.2 限定列表 249
11.3.3 未限定列表 249
11.4 lambda表达式 251
11.4.1 实现模型 251
11.4.2 lambda的替代品 252
11.4.3 捕获 254
11.4.4 调用与返回 257
11.4.5 lambda的类型 257
11.5 显式类型转换 258
11.5.1 构造 259
11.5.2 命名转换 261
11.5.3 C风格的转换 262
11.5.4 函数形式的转换 262
11.6 建议 263
第12章 函数 264
12.1 函数声明 264
12.1.1 为什么使用函数 265
12.1.2 函数声明的组成要件 265
12.1.3 函数定义 266
12.1.4 返回值 267
12.1.5 inline函数 269
12.1.6 constexpr函数 269
12.1.7 [[noreturn]]函数 271
12.1.8 局部变量 272
12.2 参数传递 273
12.2.1 引用参数 273
12.2.2 数组参数 275
12.2.3 列表参数 277
12.2.4 数量未定的参数 278
12.2.5 默认参数 281
12.3 重载函数 282
12.3.1 自动重载解析 283
12.3.2 重载与返回类型 284
12.3.3 重载与作用域 285
12.3.4 多实参解析 285
12.3.5 手动重载解析 286
12.4 前置与后置条件 286
12.5 函数指针 288
12.6 宏 292
12.6.1 条件编译 294
12.6.2 预定义宏 295
12.6.3 编译指令 296
12.7 建议 296
第13章 异常处理 297
13.1 错误处理 297
13.1.1 异常 298
13.1.2 传统的错误处理 299
13.1.3 渐进决策 300
13.1.4 另一种视角看异常 301
13.1.5 何时不应使用异常 302
13.1.6 层次化错误处理 303
13.1.7 异常与效率 304
13.2 异常保障 305
13.3 资源管理 307
13.3.1 finally 310
13.4 强制不变式 311
13.5 抛出与捕获异常 315
13.5.1 抛出异常 315
13.5.2 捕获异常 318
13.5.3 异常与线程 324
13.6 vector的实现 324
13.6.1 一个简单的vector 325
13.6.2 显式地表示内存 328
13.6.3 赋值 331
13.6.4 改变尺寸 332
13.7 建议 335
第14章 名字空间 337
14.1 组合问题 337
14.2 名字空间 338
14.2.1 显式限定 339
14.2.2 using声明 340
14.2.3 using指示 341
14.2.4 参数依赖查找 342
14.2.5 名字空间是开放的 344
14.3 模块化和接口 345
14.3.1 名字空间作为模块 346
14.3.2 实现 348
14.3.3 接口和名字 349
14.4 组合使用名字空间 351
14.4.1 便利性与安全性 351
14.4.2 名字空间别名 352
14.4.3 组合名字空间 352
14.4.4 组合与选择 353
14.4.5 名字空间和重载 354
14.4.6 版本控制 356
14.4.7 名字空间嵌套 358
14.4.8 无名名字空间 359
14.4.9 C头文件 359
14.5 建议 360
第15章 源文件与程序 362
15.1 分离编译 362
15.2 链接 363
15.2.1 文件内名字 365
15.2.2 头文件 366
15.2.3 单一定义规则 368
15.2.4 标准库头文件 369
15.2.5 链接非C++代码 370
15.2.6 链接和函数指针 372
15.3 使用头文件 373
15.3.1 单头文件组织 373
15.3.2 多头文件组织 376
15.3.3 包含保护 380
15.4 程序 381
15.4.1 非局部变量初始化 381
15.4.2 初始化和并发 382
15.4.3 程序终止 383
15.5 建议 384
第三部分 抽象机制
第16章 类 386
16.1 引言 386
16.2 类基础 387
16.2.1 成员函数 388
16.2.2 默认拷贝 389
16.2.3 访问控制 389
16.2.4 class和struct 390
16.2.5 构造函数 391
16.2.6 explicit构造函数 393
16.2.7 类内初始化器 395
16.2.8 类内函数定义 395
16.2.9 可变性 396
16.2.10 自引用 399
16.2.11 成员访问 400
16.2.12 static成员 401
16.2.13 成员类型 403
16.3 具体类 403
16.3.1 成员函数 406
16.3.2 辅助函数 408
16.3.3 重载运算符 410
16.3.4 具体类的重要性 410
16.4 建议 411
第17章 构造、清理、拷贝和移动 413
17.1 引言 413
17.2 构造函数和析构函数 415
17.2.1 构造函数和不变式 415
17.2.2 析构函数和资源 416
17.2.3 基类和成员析构函数 417
17.2.4 调用构造函数和析构函数 418
17.2.5 virtual析构函数 419
17.3 类对象初始化 420
17.3.1 不使用构造函数进行初始化 420
17.3.2 使用构造函数进行初始化 421
17.3.3 默认构造函数 424
17.3.4 初始化器列表构造函数 425
17.4 成员和基类初始化 429
17.4.1 成员初始化 429
17.4.2 基类初始化器 431
17.4.3 委托构造函数 431
17.4.4 类内初始化器 432
17.4.5 static成员初始化 434
17.5 拷贝和移动 435
17.5.1 拷贝 435
17.5.2 移动 441
17.6 生成默认操作 444
17.6.1 显式声明默认操作 444
17.6.2 默认操作 445
17.6.3 使用默认操作 446
17.6.4 使用delete删除的函数 449
17.7 建议 451
第18章 运算符重载 452
18.1 引言 452
18.2 运算符函数 453
18.2.1 二元和一元运算符 454
18.2.2 运算符的预置含义 455
18.2.3 运算符与用户自定义类型 456
18.2.4 传递对象 456
18.2.5 名字空间中的运算符 457
18.3 复数类型 459
18.3.1 成员和非成员运算符 459
18.3.2 混合模式运算 460
18.3.3 类型转换 461
18.3.4 字面值常量 463
18.3.5 访问函数 464
18.3.6 辅助函数 465
18.4 类型转换 466
18.4.1 类型转换运算符 466
18.4.2 explicit类型转换运算符 467
18.4.3 二义性 468
18.5 建议 469
第19章 特殊运算符 471
19.1 引言 471
19.2 特殊运算符 471
19.2.1 取下标 471
19.2.2 函数调用 472
19.2.3 解引用 473
19.2.4 递增和递减 475
19.2.5 分配和释放 477
19.2.6 用户自定义字面值常量 478
19.3 字符串类 481
19.3.1 必备操作 481
19.3.2 访问字符 482
19.3.3 类的表示 483
19.3.4 成员函数 485
19.3.5 辅助函数 487
19.3.6 应用String 489
19.4 友元 490
19.4.1 发现友元 491
19.4.2 友元与成员 492
19.5 建议 493
第20章 派生类 495
20.1 引言 495
20.2 派生类 496
20.2.1 成员函数 498
20.2.2 构造函数和析构函数 499
20.3 类层次 500
20.3.1 类型域 500
20.3.2 虚函数 502
20.3.3 显式限定 504
20.3.4 覆盖控制 505
20.3.5 using基类成员 508
20.3.6 返回类型放松 511
20.4 抽象类 512
20.5 访问控制 514
20.5.1 protected成员 517
20.5.2 访问基类 518
20.5.3 using声明与访问控制 519
20.6 成员指针 520
20.6.1 函数成员指针 520
20.6.2 数据成员指针 522
20.6.3 基类和派生类成员 523
20.7 建议 523
第21章 类层次 524
21.1 引言 524
21.2 设计类层次 524
21.2.1 实现继承 525
21.2.2 接口继承 527
21.2.3 替代实现方式 529
21.2.4 定位对象创建 532
21.3 多重继承 533
21.3.1 多重接口 533
21.3.2 多重实现类 533
21.3.3 二义性解析 535
21.3.4 重复使用基类 538
21.3.5 虚基类 539
21.3.6 重复基类与虚基类 544
21.4 建议 546
第22章 运行时类型信息 547
22.1 引言 547
22.2 类层次导航 547
22.2.1 dynamic_cast 548
22.2.2 多重继承 551
22.2.3 static_cast和dynamic_cast 552
22.2.4 恢复接口 553
22.3 双重分发和访客 557
22.3.1 双重分发 557
22.3.2 访客 559
22.4 构造和析构 561
22.5 类型识别 561
22.5.1 扩展类型信息 563
22.6 RTTI的使用和误用 564
22.7 建议 565
第23章 模板 566
23.1 引言和概述 566
23.2 一个简单的字符串模板 568
23.2.1 定义模板 569
23.2.2 模板实例化 571
23.3 类型检查 571
23.3.1 类型等价 572
23.3.2 错误检测 573
23.4 类模板成员 574
23.4.1 数据成员 574
23.4.2 成员函数 575
23.4.3 成员类型别名 575
23.4.4 static成员 575
23.4.5 成员类型 576
23.4.6 成员模板 577
23.4.7 友元 580
23.5 函数模板 582
23.5.1 函数模板实参 583
23.5.2 函数模板实参推断 584
23.5.3 函数模板重载 586
23.6 模板别名 590
23.7 源码组织 591
23.7.1 链接 593
23.8 建议 594
第24章 泛型程序设计 595
24.1 引言 595
24.2 算法和提升 596
24.3 概念 599
24.3.1 发现概念 599
24.3.2 概念和约束 602
24.4 具体化概念 604
24.4.1 公理 607
24.4.2 多实参概念 607
24.4.3 值概念 608
24.4.4 约束检查 609
24.4.5 模板定义检查 610
24.5 建议 612
第25章 特例化 613
25.1 引言 613
25.2 模板参数和实参 614
25.2.1 类型作为实参 614
25.2.2 值作为实参 615
25.2.3 操作作为实参 616
25.2.4 模板作为实参 618
25.2.5 默认模板实参 619
25.3 特例化 621
25.3.1 接口特例化 623
25.3.2 主模板 624
25.3.3 特例化顺序 625
25.3.4 函数模板特例化 626
25.4 建议 628
第26章 实例化 629
26.1 引言 629
26.2 模板实例化 630
26.2.1 何时需要实例化 630
26.2.2 手工控制实例化 631
26.3 名字绑定 632
26.3.1 依赖性名字 633
26.3.2 定义点绑定 635
26.3.3 实例化点绑定 636
26.3.4 多实例化点 638
26.3.5 模板和名字空间 639
26.3.6 过于激进的ADL 639
26.3.7 来自基类的名字 641
26.4 建议 643
第27章 模板和类层次 645
27.1 引言 645
27.2 参数化和类层次 646
27.2.1 生成类型 647
27.2.2 模板类型转换 649
27.3 类模板层次 650
27.3.1 模板作为接口 651
27.4 模板参数作为基类 652
27.4.1 组合数据结构 652
27.4.2 线性化类层次 655
27.5 建议 660
第28章 元编程 661
28.1 引言 661
28.2 类型函数 663
28.2.1 类型别名 665
28.2.2 类型谓词 666
28.2.3 选择函数 668
28.2.4 萃取 668
28.3 控制结构 670
28.3.1 选择 670
28.3.2 迭代和递归 673
28.3.3 何时使用元编程 674
28.4 条件定义:Enable_if 675
28.4.1 使用Enable_if 676
28.4.2 实现Enable_if 678
28.4.3 Enable_if与概念 678
28.4.4 更多Enable_if例子 679
28.5 一个编译时列表:Tuple 681
28.5.1 一个简单的输出函数 683
28.5.2 元素访问 684
28.5.3 make_tuple 686
28.6 可变参数模板 686
28.6.1 一个类型安全的printf() 687
28.6.2 技术细节 689
28.6.3 转发 691
28.6.4 标准库tuple 692
28.7 国际标准单位例子 694
28.7.1 Unit 695
28.7.2 Quantity 696
28.7.3 Unit字面值常量 697
28.7.4 工具函数 698
28.8 建议 700
第29章 一个矩阵设计 701
29.1 引言 701
29.1.1 Matrix的基本使用 701
29.1.2 对Matrix的要求 703
29.2 Matrix模板 704
29.2.1 构造和赋值 705
29.2.2 下标和切片 706
29.3 Matrix算术运算 708
29.3.1 标量运算 709
29.3.2 加法 710
29.3.3 乘法 711
29.4 Matrix实现 712
29.4.1 slice() 713
29.4.2 Matrix切片 713
29.4.3 Matrix_ref 714
29.4.4 Matrix列表初始化 715
29.4.5 Matrix访问 717
29.4.6 零维Matrix 719
29.5 求解线性方程组 720
29.5.1 经典高斯消去法 721
29.5.2 旋转 722
29.5.3 测试 723
29.5.4 熔合运算 723
29.6 建议 725

教学资源推荐
作者: [美] 劳拉·格雷泽(Laura Graesser) 龚辉伦(Wah Loon Keng) 著
作者: [美]雷蒙德·盖拉多(Raymond Gallardo) 斯科特·霍梅尔(Scott Hommel) 索娅·坎南(Sowmya Kannan) 琼尼·戈登(Joni Gordon) 沙伦·比奥卡·扎卡沃(Sharon Biocca Zakhour)著
作者: 苏小红 蒋远 单丽莉 李东 编著
参考读物推荐
作者: [加]吉姆·范·麦格伦(Jim Van Meggelen),[美]罗素·布莱恩特(Russell Bryant),[加]莱夫·马德森(Leif Madsen) 著
作者: [美] 马克·威廉姆斯(Mark Williams)[英] 科里·本菲尔德(Cory Benfield) [美]布莱恩·华纳(Brian Warner) [美]摩西·扎德卡(Moshe Zadka) [美]达斯汀·米切尔(Dustin Mitchell) [法]凯文·塞缪尔(Kevin Samuel) [法]皮埃尔·塔迪(Pierre Tardy) 著
作者: 刘文如 编著