C++ 程序设计语言(第 1 - 3 部分)(原书第 4 版)

0
(0)

C++ 程序设计语言(第 1 - 3 部分)(原书第 4 版)

作者:BjarneStroustrup

出版社:机械工业出版社

原作名:TheC++ProgrammingLanguage,FourthEdition

译者:王刚/杨巨峰

出版年:2016-7

页数:726

定价:139.00

装帧:平装

丛书:计算机科学丛书

ISBN:9787111539414

内容简介
······

《C++程序设计语言》(原书第4版)是C++领域最经典的参考书,介绍了C++11的各项新特性和新功能。全书共分四部分。第一部分(第1~5章)是引言,包括C++的背景知识,C++语言及其标准库的简要介绍;第二部分(第6~15章)介绍C++的内置类型和基本特性,以及如何用它们构造程序;第三部分(第16~29章)介绍C++的抽象机制及如何用这些机制编写面向对象程序和泛型程序;第四部分(第30~44章)概述标准库并讨论一些兼容性问题。由于篇幅问题,原书中文版分两册出版,分别对应原书的第一至三部分和第四部分。这一册为第一至三部分。

作者简介
······

作者:(美国)本贾尼·斯特劳斯特鲁普(Bjarne Stroustrup) 译者:王刚 杨巨峰

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

目录
······

出版者的话

译者序

前言

第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 匿名 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

评论 ······

神书!作者C++之父!!!真正是大师杰作 膜拜ing

写得不错,翻译的也挺好

完全不是入门书,但是对我这样兜兜转转左学一点右学一点的人来说是最好的 C++ 教材了

真的难看

点击星号评分!

平均分 0 / 5. 投票数: 0

还没有投票!请为他投一票。

推荐阅读

评论 抢沙发

评论前必须登录!

 

登录

找回密码

注册