C++ Primer中文版(第三版)

C++ Primer中文版(第三版)
作 者: Stanley Lippman Josee Lajoie 潘爱民 张丽
出版社: 中国电力出版社
丛编项: 深入C++系列
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: C++
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  Stanley Lippman 他的职业是提供关于C++和面向对象的训练、咨询、设计和指导。他在成为一名独立咨询顾问之前,曾经是迪士尼动画公司的首席软件设计师。当他在AT&T B ell实验室的时候,领导了cfront 3.0版本和2.1版本的编译器开发组他也是Bjarne Stroustrup领导的Bell实验室Foundation项目的成员之一,负责C++程序设计环境中的对象模型部分。Stan是本书所有三个版本的作者,他还撰写了许多关于C++的文章。目前他已受雇于微软公司,负责Visual C++项目。Josee Lajoie 是IBM加拿大实验室的C/C++编译器开发组的一名成员,也是ANSI/ISO C++标准委员会的核心语言工作组的主席。Josee是《C++ Report》杂志的专栏作家,目前正在滑铁卢大学的计算机图形实验室攻读硕士学位。潘爱民 浙江海宁人,现任职于北京大学计算机科学技术研究所,副研究员,研究方向为网络与信息安全。自1994年至1999年,他一直从事计算机软件开发方面的工作。1998年到今,了利用业余时间著译了多部关于软件开发的著作,如《Visual C++技术内幕》(第四版),《COM原理与应用》、《COM本质论》、《深入解析ATL》等。1999年他还是《微电脑世界》杂志社的合作专家,撰写了大量深入权威的技术文章。1991年他在南开大学数学系获学士学位,1994年在清华大学自动化系获硕士学位。

内容简介

C++ Primer的第三版结合了Stanley B.Lippman的实践经验和Josée Lajoie对于ANSI/ISO标准C++的深入理解。这本指导书的第三版已经被重新改写过,以便更加精确地讲述标准C++的特性和用法。在本书中,对于C++初学者特别有价值的是一些来自真实世界中的程序例子,它们说明了泛型程序(generic program)的设计、面向对象程序的设计、模板的用法,以及使用标准C++进行程序设计的方方面面。而且,本书也在适当的地方讲到了一些习惯用法以及效率指导。 第三版的变化分为四类: 1.涵盖了语言所增加的新特性:异常处理、运行时刻类型识别、名字空间、内置bool类型、新风格的类型强制转换。 2.涵盖了新的C++标准库,包括complex和string类型、auto_ptr和pair类型、顺序容器和关联容器类型(主要是list、vector、map、set容器),以及泛型算法。 3.对原来的文字作了调整,以反映出标准C++对原有语言特性的精炼、变化以及扩展。语言精炼的一个例子是,现在能够前向声明一个嵌套类型,这在以前是不允许的。语言变化的一个例子是,一个虚拟函数的派生类实例能够返回一个“基类实例的返回类型”的派生类。这种变化支持一个被称为clone 或factory的方法(关于clone()虚拟函数,见17.5.7节说明)。对原有语言特性进行扩展的一个例子是,现在可以显式地指定一个函数模板的一个或多个模板实参。(实际上,模板已经被大大地扩展了,差不多已经成为一个新特性!) 4.加强了对C++高级特性的对待和组织方式,尤其是对于模板、类以及面向对象程序设计。Stan从一个相对较小的C++提供者团体到一般的C++用户团体的转移,带来的一个影响是,他相信,越是深入地了解问题,则程序员越是能够高明地使用C++语言。因此,在第三版中,许多情况下,我们已经把焦点转移到如何更好地说明底层特性的概念,以及怎样最好地使用它们,并指出在适当的时候应该避免潜在的缺陷。

图书目录

第一篇 C++概述

第1章 开始 3

1.1 问题的解决 3

1.2 C++程序 4

1.3 预处理器指示符 10

1.4 注释 14

1.5 输入/输出初步 16

第2章 C++浏览 20

2.1 内置数组数据类型 20

2.2 动态内存分配和指针 23

2.3 基于对象的设计 26

2.4 面向对象的设计 36

2.5 泛型设计 44

2.6 基于异常的设计 50

2.7 用其他名字来命名数组 54

2.8 标准数组--向量(vector) 59

第二篇 基本语言

第3章 C++数据类型 67

3.1 文字常量 67

3.2 变量 70

3.3 指针类型 78

3.4 字符串类型 83

3.5 const限定修饰符 91

3.6 引用类型 94

3.7 布尔类型 99

3.8 枚举类型 100

3.9 数组类型 102

3.10 vector容器类型 110

3.11 复数类型 113

3.12 Typedef名字 114

3.13 volatile 115

3.14 pair类型 116

3.15 类(class)类型 117

第4章 表达式 127

4.1 什么是表达式 127

4.2 算术操作符 129

4.3 等于、关于和逻辑操作符 131

4.4 赋值操作符 134

4.5 递增和递减操作符 138

4.6 复数操作 140

4.7 条件操作符 143

4.8 sizeof操作符 144

4.9 new和delete表达式 146

4.10 逗号操作符 148

4.11 位操作符 148

4.12 bitset操作 151

4.13 优先级 155

4.14 这表型转换 158

4.15 栈类实例 167

第5章 语句 171

5.1 简单语句和复合语句 171

5.2 声明语句 172

5.3 if语句 175

5.4 switch语句 183

5.5 for循环语句 190

5.6 while循环 194

5.7 do while 196

5.8 break语句 198

5.9 continue语句 199

5.10 goto语句 199

5.11 链表例子 201

第6章 抽象容器类型 226

6.1 我们的文本查询系统 227

6.2 vector还是list? 230

6.3 cector怎样自己增长 231

6.4 定义一个顺序容器 234

6.5 迭代器 238

6.6 顺序容器操作 242

6.7 存储文本行 246

6.8 找到一个子串 249

6.9 处理标点符号 255

6.10 注意其他格式的字符串 258

6.11 其他string操作 261

6.12 生成文本位置map 266

6.13 创建单词排除集 276

6.14 完整的程序 279

6.15 multimap和multiset 288

6.16 栈(stack) 291

6.17 队列(queue)和优先队列(priority_queue) 293

6.18 回顾iStack类 294

第三篇 基本过程的程序设计

第7章 函数 299

7.1 概述 299

7.2 函数原型 302

7.3 参数传递 305

7.4 返回一个值 322

7.5 递归 326

7.6 inline函数 328

7.7 链接指示符:extern"C" 329

7.8 main():处理命令行选项 332

7.9 指向函数的指针※ 342

第8章 域和生命期 353

8.1 域 353

8.2 全局对象和函数 358

8.3 局部对象 364

8.4 动态分配的对象 367

8.5 名字空间定义 ※ 379

8.6 使用名字空间成员 ※ 391

第9章 重载函数 400

9.1 重载函数声明 400

9.2 重载解析的三个步骤 411

9.3 参数类型转换 ※ 413

9.4 函数重载解析细节 426

第10章 函数模板 439

10.1 函数模板定义 439

10.2 函数模板实例化 446

10.3 模板实参推演 ※ 449

10.4 显式模板实参 ※ 453

10.5 模板编译模式 ※ 456

10.6 模板显式特化 ※ 460

10.7 重载函数模板 ※ 465

10.8 考虑模板函数实例的重载解析 ※ 467

10.9 模板定义中的名字解析 ※ 474

10.10 名字空间和函数模板 ※ 480

10.11 函数模板示例 484

第11章 异常处理 487

11.1 抛出异常 487

11.2 try块 490

11.3 捕获异常 494

11.4 异常规范 502

11.5 异常与设计事项 505

第12章 泛型算法 507

12.1 概述 507

12.2 使用泛型算述 510

12.3 函数对象 520

12.4 回顾iterator 528

12.5 泛型算法 535

12.6 何时不用泛型算法 538

第四篇 基于对象的程序设计

第13章 类 545

13.1 类定义 545

13.2 类对象 552

13.3 类成员函数 554

13.4 隐含的this指针 565

13.5 静态类成员 570

13.6 指向类成员的指针 576

13.7 联合(union):一个节省空间的类 585

13.8 位域(bit-field):一种节省空间的成员 590

13.9 类域 ※ 591

13.10 嵌套类 598

13.11 作为名字空间成员的类 ※ 607

13.12 局部类 ※ 610

第14章 类的初始化、赋值和析构 613

14.1 类的初始化 613

14.2 类的构造函数 615

14.3 类的析构函数 625

14.4 类对象数组和vector 631

14.5 成员初始化表 637

14.6 按成员初始化 ※ 643

14.7 按成员赋值 ※ 648

14.8 效率问题 651

第15章 重载操作符和用户定义的转换 657

15.1 操作符重载 657

15.2 友元(friend) 666

15.3 操作符 = 669

15.4 操作符 [] 671

15.5 操作符operator() 672

15.6 操作符 -> 674

15.7 操作符 ++和-- 676

15.8 操作符new和delete 680

15.9 用户定义的转换 688

15.10 选择一个转换 ※ 697

15.11 重载解析和成员函数 ※ 708

15.12 重载解析和操作符 ※ 713

第16章 类模板 722

16.1 类模板定义 722

16.2 类模板实例化 730

16.3 类模板的成员函数 739

16.4 类模板中的友元(friend)声明 742

16.5 类模板的静态数据成员 747

16.6 类模板的嵌套类型 749

16.7 成员模板 ※ 752

16.8 类模板和编译模式 ※ 756

16.9 类模板特化 ※ 762

16.10 类模板部分特化 ※ 765

16.11 类模板中的名字解析 ※ 767

16.12 名字空间和类模板 ※ 769

16.13 模板数组类 771

第五篇 面向对象的程序设计

第17章 类继承和子类型 781

17.1 定义一个类层次结构 784

17.2 确定层次的成员 790

17.3 基类成员访问 800

17.4 基类和派生类的构造 807

17.5 基类和派生类虚拟函数 816

17.6 按成员初始化和赋值 ※ 839

17.7 UserQuery管理类 844

17.8 把它组合在一起 852

第18章 多继承和虚拟继承 858

18.1 准备阶段 858

18.2 多继承 862

18.3 public、private和protected继承 868

18.4 继承下的类域 875

18.5 虚拟继承 ※ 883

18.6 多继承及虚拟继承实例 ※ 893

18.7 按成员赋值 ※ 648

18.8 效率问题 651

第19章 C++中继承的用法 906

19.1 运行时刻类型识别 906

19.2 异常和继承 916

19.3 重载解析过程和继承 ※ 932

第20章 iostream库 942

20.1 输出操作符<< 946

20.2 输入 951

20.3 其他输入/输出操作符 962

20.4 重载输出操作符<< 968

20.5 重载输入操作符>> 972

20.6 文件输入和输出 975

20.7 条件状态 984

20.8 string流(字符串流) 986

20.9 格式状态 989

20.10 一个强类型库 997

附录 泛型算法(按字母序) 999