《标准C++编程宝典》PDF下载

  • 购买积分:17 如何计算积分?
  • 作  者:(美)Raphael Pender,苏剑等编著
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2005
  • ISBN:7121006782
  • 页数:593 页
图书介绍:本书特色:·全方位领略C++的强大功能,轻松掌握所有相关知识;·通过由浅入深、由易到难的典型实例,快速精通C++编程;·运用C++强大灵活的类机制编写一流的面向对象程序·利用标准C++库进行简单、高效的应用程序开发。C++内容丰富、功能强大,是全世界专业编程人员的首选语言。本书内容全面、实例典型,且自成体系,是C++语言的完整教程。标准C++是C++的国际性标准版本,本书以标准为基础,对C++进行了全面介绍。本书从最基本的内容讲起,对C++的强大功能进行了详细介绍;运用C++的最新功能,详细论述了面向对象编程的思想;同时,还介绍了C++和C的不同之处。配上自成体系,是C++语言的完整教程,不要求读者预先掌握C语言。本书针对那些比较高深难懂的内容也做了深入浅出的介绍,比如模板(包括函数模版、类模版和标准模板库)、名字空间以及守行时类型信息(RTTI)等,这些功能对于开发大型复杂系统的程序设计人员来说是非常重要的。因此,无论是新手还是有经验的程序员,都可以从本书获取所需要的知识。本书内容综合、全面,叙述流畅、清晰,实例典型、丰富,主要针对那些既不懂C也不懂C++、但又希望学习C++的程序员

第1部分 C++语言 1

1.2 C与C++的比较 2

1.1 C语言和C++语言的历史 2

第1章 C++语言概述 2

1.3 C++简述 3

1.4 main()函数 5

1.5 小结 6

2.1 学习编写第一个程序 7

2.1.4 main()函数的语句块 8

第2章 编写简单的C++程序 8

2.1.3 main()函数声明 8

2.1.1 #include指令 8

2.1.2 空行 8

2.2 标识符 9

2.1.8 语句块的结束 9

2.1.5 源代码注释 9

2.1.6 控制台输出 9

2.1.7 return语句 9

2.4 标准输出流 10

2.3 关键字 10

2.5.1 布尔型变量 11

2.5 变量 11

2.5.2 字符型变量 12

2.5.3 wchar_t型变量 13

2.5.4 整型变量 14

2.6 常量 15

2.5.5 浮点型变量 15

2.6.2 转义字符 16

2.6.1 字符型常量 16

2.6.5 地址常量 17

2.6.4 浮点型常量 17

2.6.3 整型常量 17

2.7 表达式 18

2.6.6 字符串常量 18

2.8 赋值语句 19

2.9 用逗号分隔的声明语句 20

2.10.1 算术运算符 21

2.10 表达式中的运算符 21

2.10.2 逻辑运算符 22

2.10.3 位逻辑运算符 23

2.10.5 关系运算符 24

2.10.4 位移运算符 24

2.10.6 自增运算符和自减运算符 25

2.10.7 赋值运算符 27

20.2.3 关联式容器 28

2.10.8 复合赋值运算符 28

20.2.6 谓词 29

2.10.9 条件运算符 29

2.10.10 逗号运算符 31

2.11 运算符的优先级与结合性 32

2.11.1 结合性 32

2.11.2 优先级 33

2.12 表达式不参加运算的情况 33

2.13 初始化 34

2.14 类型转换 35

2.15 控制台输入与输出 36

2.15.1 标准输出流 36

2.15.2 格式化输出 37

2.15.3 标准错误流 38

2.15.4 标准输入流 39

6.5.1 堆 39

2.16 小结 40

3.1 函数 42

第3章 函数 42

3.2 实际参数和形式参数 43

3.3.1 无标识符的参数类型 43

3.3 函数原型 43

3.3.2 一个典型的函数原型 44

3.3.4 参数列表为空的函数 44

3.3.5 参数列表可变的函数 44

3.3.3 返回类型为void的函数 44

3.3.6 既不带参数也没有返回值的函数 45

3.3.8 不需要原型的函数 45

3.4 定义和调用函数 45

3.3.7 标准库函数的原型 45

3.5 从函数返回 46

3.6 函数的返回值 48

3.7 传递和使用参数 49

3.7.2 通过函数调用来进行初始化 50

3.7.3 初始化的顺序 50

3.7.1 标识符的作用域 50

3.7.4 具有多个参数的函数 51

3.7.6 值传递 52

3.7.7 实际参数和返回值的类型转换 52

3.8 无名形式参数 52

3.7.5 用做实际参数的函数调用 52

3.9 默认的函数参数 53

3.10 内联函数 54

3.11 递归 55

3.12.1 为不同的操作而重载 55

3.12 函数的重载 55

3.12.2 为不同的格式而重载 57

3.14 链接说明 58

3.13 安全链接 58

3.15 小结 62

4.1 语句块 63

4.1.1 语句块的嵌套深度 63

4.1.2 缩进风格 63

第4章 C++的程序流程控制 63

4.2 分支语句 64

4.2.1 if语句 64

4.2.2 if...else语句 67

4.2.3 else if语句 67

4.2.4 switch...case语句 69

4.2.5 在if语句的条件表达式中进行变量声明 70

4.3 循环语句 71

4.3.1 while语句 71

4.3.2 do...while语句 72

4.3.3 for语句 74

4.3.4 在for语句的条件表达式中声明变量 76

4.4.1 break语句 76

4.4 循环控制语句 76

4.4.2 continue语句 77

4.5 跳转语句:goto 78

4.5.1 goto语句的错误用法 79

4.5.3 改正错误的goto语句 80

4.5.2 C++语言的goto语句和C语言的goto语句的比较 80

4.5.4 是否应该使用goto语句 82

4.6 小结 82

第5章 数据类型 83

5.1.1 全局作用域 83

5.1 标识符的作用域 83

5.1.2 局部作用域 84

5.1.3 全局作用域解析符 86

5.1.4 文件作用域 87

5.1.5 变量的作用域和生存周期 88

5.2 存储类 89

5.2.1 自动存储类 89

5.2.2 静态存储类 90

5.2.3 外部存储类 91

5.2.4 寄存器存储类 92

5.3 初始化的默认值 93

5.4 类型修饰符 94

5.4.1 const类型修饰符 94

5.4.2 volatile类型修饰符 95

5.5 用户定义的数据类型 95

5.5.1 声明结构 96

5.5.3 引用结构成员 96

5.5.2 定义结构变量 96

5.5.4 初始化结构变量 97

5.5.5 结构的嵌套 98

5.5.6 向函数传递结构和从函数返回结构 99

5.6 联合数据类型 100

5.6.1 初始化联合 102

5.6.2 匿名联合 103

5.6.3 枚举常量 104

5.7.1 声明数组 105

5.7.2 利用下标访问数组元素 105

5.7 数组 105

5.7.3 初始化数组 106

5.7.4 结构数组 107

5.7.5 多维数组 108

5.7.6 字符型数组:一个特例 109

5.8 小结 110

6.1 地址和指针 111

6.1.1 指向内部数据类型的指针 111

第6章 地址、指针和引用型变量 111

6.1.2 指针的算术运算 113

6.1.3 指针和数组的关系 115

6.1.4 指向结构的指针 118

6.1.5 作为函数参数的指针 119

6.1.6 以地址作为函数的返回值 122

6.1.7 指向函数的指针 124

6.1.8 指向指针的指针 127

6.1.9 指向指针数组的指针 128

6.1.10 指向const型变量的指针 129

6.1.11 const型指针变量 131

6.1.12 void型指针 132

6.2 sizeof运算符 134

6.3 强制类型转换 136

6.3.2 typedef 136

6.3.1 C风格的强制类型转换 136

6.4 命令行参数:argc和argv 138

6.5 程序的内存结构 139

6.5.2 new运算符和delete运算符 139

6.5.3 为大小固定的数组分配内存 140

6.5.4 为动态数组分配内存 141

6.5.5 堆耗尽时的处理 142

6.5.6 栈 142

6.6 递归 143

6.6.1 一个简单的递归函数 143

6.6.2 一个利用递归实现的计算器程序 145

6.7 引用型变量 148

6.7.1 引用是一个别名 149

6.7.2 初始化引用 150

6.7.3 用引用来简化复杂的表示法 151

6.7.4 用做函数形参的引用 152

6.7.5 以引用方式调用函数 154

6.7.6 const型引用形参 155

6.7.7 作为函数返回值的引用 155

6.7.8 以const型引用作为返回值 157

6.7.9 返回指向自变量的引用 157

6.7.10 引用和指针 157

6.8 小结 158

第7章 库函数 159

7.1 <cassert>头文件 160

7.2 <cctype>头文件 161

7.3 <cerrno>头文件 162

7.4 <cmath>头文件 163

7.5 <csetjmp>头文件 164

7.6 <cstdarg>头文件 166

7.7 <cstdio>头文件 167

7.8 <cstdlib>头文件 168

7.8.1 数字函数 168

7.8.2 内存管理函数 168

7.8.3 系统函数 168

7.8.4 随机数发生器函数 169

7.9 <cstring>头文件 170

7.10 <ctime>头文件 172

7.11 小结 173

第8章 预处理程序 174

8.1 预处理指令 174

8.2 包含文件 174

8.3 宏 175

8.3.1 #define预处理指令 175

8.3.2 带参数的#define预处理指令 176

8.3.3 格式和对齐 181

8.3.4 #字符串化运算符 182

8.3.5 ##符号连接运算符 182

8.3.6 #undef预处理指令 184

8.4 条件编译指令 184

8.4.1 #if预处理指令 184

8.4.2 #endif预处理指令 184

8.4.3 #if defined预处理指令 185

8.4.4 #ifdef和#ifndef预处理指令 186

8.4.5 #else预处理指令 186

8.4.6 #elif预处理指令 186

8.4.7 #error预处理指令 187

8.5 其他预处理指令 188

8.5.1 #line预处理指令 188

8.5.2 #pragma预处理指令 188

8.6 小结 188

第9章 类与结构 189

9.1 C++的类 189

9.2 数据类型的属性 189

9.2.1 数据表示 189

9.2.2 实现 190

9.2.3 行为 190

9.2.4 接口 190

9.3 用户定义的数据类型 190

9.3.1 抽象 190

9.3.2 对象是什么 190

9.3.3 数据抽象和面向过程编程 190

9.3.4 数据抽象和封装 192

9.4 带有函数的结构 192

9.4.1 向结构添加函数 192

9.4.2 同一结构的多个实例 194

9.4.3 具有相同名称函数的不同结构 195

9.5 访问控制符 197

9.6 是滞应该使用面向过程编程 197

9.7 结构和类的比较 198

9.8 联合 198

9.9 小结 198

第10章 函数模板 199

10.1 函数模板基础知识 199

10.2 数的定制 201

10.3 利用模板进行排序 204

10.4 小结 206

第2部分 使用类 207

第11章 C++类 208

11.1 设计类 208

11.1.1 对类进行声明 208

11.1.2 类成员 210

11.1.3 类成员的可见性 210

11.1.4 类的数据成员 210

11.1.5 初始化类对象 210

11.1.6 类的成员函数 211

11.1.7 面向对象的类的设计 211

11.1.8 类对象的作用域 212

11.1.9 内联函数 212

11.2 构造函数 214

11.2.1 具有默认参数的构造函数 214

11.2.2 默认构造函数 215

11.2.3 重载构造函数 215

11.3 析构函数 217

11.4 类的转换 217

11.4.1 转换函数 217

11.4.2 对类进行转换 221

11.4.3 调用转换函数 223

11.4.4 转换发生的情形 224

11.4.5 显式构造函数 227

11.4.6 表达式中的转换 227

11.5 私有数据成员 228

11.5.1 取值成员函数和赋值成员函数 228

11.5.2 常量成员函数 230

11.5.3 经过改进的成员转换函数 230

11.6 友元 231

11.6.1 友元类 231

11.6.2 隐式构造函数 233

11.6.3 预引用 233

11.6.4 显式友元预引用 234

11.6.5 友元函数 235

11.6.6 匿名对象 236

11.6.7 非类成员的友元函数 237

11.7 析构函数 238

11.8 重载赋值运算符函数 240

11.9 this指针 243

11.9.1 用this指针作为返回值 243

11.9.2 在链表中使用this指针 246

11.10 类对象数组 248

11.10.1 类对象数组和默认构造函数 249

11.10.2 类对象数组和析构函数 251

11.11 静态成员 252

11.11.1 静态数据成员 252

11.11.2 静态成员函数 254

11.11.3 公有静态成员 256

11.12 类和堆 256

11.12.1 构造函数和new运算符、析构函数和delete运算符 256

11.12.2 堆和类数组 257

11.12.3 在类内部重载new和delete运算符 260

11.12.4 异常检测 262

11.12.5 重载new和delete运算符函数中的异常处理 262

11.12.6 重载new[]和delete[]运算符 262

11.13 复制构造函数 264

11.14 类中的引用 267

11.15 构造函数的参数初始化表 269

11.16 关于const修饰符的简单说明 270

11.17 可变数据成员 272

11.18 对类的源文件和目标文件的管理 273

11.18.1 头文件中的类声明 273

11.18.2 库中的类成员函数 273

11.19 小结 273

第12章 运算符重载 274

12.1 重载运算符的时机 274

12.2 重载运算符举例 275

12.3 重载运算符的规则 275

12.4 双目算术运算符 276

12.5 类成员运算符函数 276

12.6 非类成员运算符函数 278

12.7 关系运算符 280

12.8 其他赋值运算符 282

12.9 自增运算符和自减运算符 284

12.10 单目正和单目负运算符 286

12.11 下标运算符 287

12.12 成员指针运算符 288

12.13 小结 290

第13章 类继承 292

13.1 继承 292

13.2 进行继承的原因 294

13.3 设计定制的数据抽象类 294

13.3.1 基类 295

13.3.2 旨在提高效率的设计 297

13.3.3 单一继承 300

13.3.4 派生类 300

13.3.5 受保护成员 300

13.3.6 派生成员和定制成员 301

13.3.7 公有基类和私有基类 301

13.3.8 基类和派生类的构造函数 301

13.3.9 定制新的成员函数 302

13.3.10 通过重定义基类成员函数进行定制 302

13.3.11 编写程序 303

13.3.12 用于基类和派生类的作用域运算符 304

13.3.13 多个派生类 305

13.3.14 第二个派生类 305

13.3.15 使用基类和两个派生类 307

13.3.16 派生类之间的关系 308

13.3.17 从派生类派生出来的类 308

13.4 问题域类层次结构的设计 311

13.4.1 C++与纯面向对象的设计 312

13.4.2 更多的数据抽象 313

13.4.3 重载<<和>>运算符 314

13.4.4 SSN和Money类 316

13.4.5 包含头文件 318

13.4.6 C++的标准字符串类 319

13.5 Person:基类 319

13.5.1 枚举数据类型 322

13.5.2 虚函数 322

13.5.3 抽象基类:纯虚函数 322

13.5.4 两种数据显示方式 322

13.6 派生类 322

13.6.1 Employee类 322

13.6.2 函数重定义 324

13.6.3 WagedEmployee类 324

13.6.4 SalariedEmployee类 326

13.6.5 Contractor类 327

13.6.6 构造目标代码库 329

13.6.7 问题域类层次结构 329

13.6.8 通过引用调用虚函数 332

13.6.9 通过引用调用非虚函数 333

13.6.10 调用重定义的虚函数 333

13.6.11 没有被派生类重定义的虚函数 333

13.6.12 虚析构函数 333

13.6.13 应该将哪些成员函数定义为虚函数 336

13.7 多态性 336

13.8 小结 337

第14章 多重继承 338

14.1 多个基类 338

14.1.1 多重继承中的构造函数的执行 339

14.1.2 多重继承中的析构函数的执行 339

14.2 细化资产系统设计 339

14.3 对多重继承中的成员进行重定义 341

14.4 多重继承中的二义性问题 341

14.4.1 具有二义性的成员函数 342

14.4.2 具有二义性的数据成员 342

14.4.3 在设计时解决二义性问题 342

14.4.4 不可避免的二义性问题 343

14.5 虚基类 344

14.6 实现所设计的类层次结构 345

14.6.1 DisplayObject类 345

14.6.2 Vehicle类 345

14.6.3 Property类 346

14.6.4 Asset类和Expense类 347

14.6.5 Computer类和Pencils类 349

14.6.6 CompanyCar类和LeaseCar类 349

14.6.7 应用程序 349

14.7 回顾 350

14.8 小结 351

第15章 类模板 352

15.1 基础知识 352

15.2 声明类模板的多个对象 353

15.3 调用类模板的成员函数 353

15.4 声明多个参数 353

15.5 有界数组类模板 356

15.6 何时使用类模板 358

15.7 链表模板 359

15.7.1 整型链表模板 363

15.7.2 日期链表模板 364

15.8 模板的定制 365

15.8.1 类模板的定制 366

15.8.2 模板成员函数的定制 367

15.8.3 模板的部分定制 368

15.9 默认的类模板参数 370

15.10 小结 371

第16章 面向对象程序设计 372

16.1 基础知识 372

16.2 过程化程序设计 372

16.3 面向对象程序设计 373

16.3.1 面向对象的程序 373

16.3.2 对象 374

16.3.3 抽象 374

16.3.4 封装 375

16.3.5 方法和消息 376

16.3.6 成员函数 378

16.3.7 继承 378

16.3.8 类的关系 379

16.3.9 多态性 379

16.4 小结 379

第3部分 标准C++库 381

第17章 标准C++库简介 382

17.1 std∷string类 382

17.1.1 构造字符串 382

17.1.2 对字符串进行赋值 382

17.1.3 连接字符串 383

17.1.4 字符串的下标 383

17.1.5 比较字符串 383

17.1.6 子串 383

17.1.7 搜索字符串 384

17.1.8 字符串操作 384

17.2 输入/输出流 384

17.2.1 流类 385

17.2.2 缓冲输出 385

17.2.3 格式化输出 386

17.2.4 文件输入/输出 394

17.3 std∷complex类 396

17.4 标准模板库 397

17.5 标准异常 398

17.6 小结 400

第18章 格式化iostream类和stringstream类 401

18.1 格式化输出 401

18.2 操纵算子、格式化标志和成员函数 402

18.2.1 std∷ios∷width()函数 402

18.2.2 std∷setw操纵算子 403

18.2.3 std∷ios∷fill()函数 404

18.2.4 输出对齐 404

18.2.5 setprecision操纵算子 405

18.2.6 科学记数法和定点记数法 406

18.2.7 std∷ios∷setf()和std∷ios∷unsetf()函数 407

18.2.8 格式化标志 407

18.2.9 格式化操纵算子 408

18.2.10 格式化函数 408

18.3 小结 410

第19章 文件输入/输出流 411

19.1 文件流类的层次结构 411

19.2 std∷ofstream类 411

19.3 std∷ifstream类 416

19.3.1 读取文件直至文件结束 417

19.3.2 在文件中定位 418

19.3.3 读取和写入流文件 420

19.3.4 建立和解除文件与流的关联 421

19.4 二进制文件与文本文件 422

19.5 std∷fstream类 422

19.6 小结 423

第4部分 标准模板库 425

第20章 标准模板库概述 426

20.1 需要STL的原因 426

20.2 STL程序设计模型 426

20.2.1 序列 427

20.2.2 容器适配器 427

20.2.4 迭代器 428

20.2.7 分配器 429

20.2.5 算法 429

20.3 小结 430

21.2 向量类模板 431

21.1 序列式容器概述 431

第21章 序列 431

21.2.1 插入向量元素 433

21.2.2 删除向量元素 435

21.2.3 比较向量 437

21.2.4 向量的成员函数 438

21.3 双端队列类模板 439

21.3.1 向双端队列插入元素 440

21.3.2 删除双端队列中的元素 442

21.3.3 比较双端队列 444

21.3.4 双端队列的成员函数 445

21.4 链表类模板 446

21.4.1 插入链表元素 447

21.4.2 删除链表元素 450

21.4.3 比较链表 451

21.5 std∷stack容器适配器 453

21.4.4 链表的成员函数 453

21.6 std∷queue容器适配器 455

21.7 std∷priority_queue容器适配器 457

21.8 小结 458

22.2 std∷set类模板 459

22.1 关联式容器简介 459

第22章 关联式容器 459

22.2.1 向集合中插入元素 460

22.2.2 从集合中删除元素 461

22.2.3 在集合中查找元素 463

22.2.4 对集合进行比较 464

22.2.5 集合的成员函数 465

22.3 std∷multiset类模板 466

22.3.1 向多重集合中插入元素 467

22.3.2 从多重集合中删除元素 468

22.3.3 在多重集合中查找元素 470

22.3.4 对多重集合进行比较 471

22.3.5 多重集合的成员函数 473

22.4 std∷map类模板 474

22.4.1 向映射中插入元素 475

22.4.2 从映射中删除元素 477

22.4.3 在映射中查找元素 478

22.4.4 对映射进行比较 480

22.4.5 映射的成员函数 481

22.5 std∷multimap类模板 482

22.5.1 向多重映射中插入元素 483

22.5.2 从多重映射中删除元素 484

22.5.3 在多重映射中查找元素 485

22.5.4 对多重映射进行比较 487

22.5.5 多重映射的成员函数 488

22.6.1 在位集合中对位进行操作 489

22.6 std∷bitset类模板 489

22.6.2 在位集合中测试位的状态 491

22.6.3 对位集合进行比较 492

22.7 用户定义的谓词 494

22.6.4 位集合的成员函数 494

22.8 小结 497

23.2 非修正序列算法 498

23.1 通用算法概述 498

第23章 通用算法 498

23.3 修正序列算法 503

23.4 排序算法 509

23.5 数值算法 519

23.6 小结 525

第24章 迭代器 526

24.1 迭代器简介 526

24.2 输入迭代器 526

24.3 输出迭代器 528

24.4 前向迭代器 529

24.5 双向迭代器 530

24.6 随机访问迭代器 532

24.7 特殊用途的迭代器 535

24.7.1 流迭代器 535

24.7.2 迭代器适配器 538

24.8 小结 543

第25章 异常处理 544

25.1 C语言中的异常处理 544

25.2.1 try块 546

25.2.2 catch异常处理模块 546

25.2 C++语言中的异常处理 546

25.2.3 throw语句 547

25.2.4 try/throw/catch语句 547

25.2.5 异常指定 550

25.2.6 不可预见的异常 551

25.2.7 catch-all异常处理模块 551

25.2.8 从一个处理模块中抛出异常 553

25.2.9 未经捕获的异常 554

25.3 在抛出的异常中进行选择 556

25.4 异常及未释放的资源 558

25.5 一个改进的计算器程序 558

25.6 小结 562

第5部分 C++语言的高级主题 563

第26章 名字空间 564

26.1 名字空间简介 564

26.2 名字空间的成员 565

26.3 using namespace语句 565

26.4 定义名字空间 567

26.5 嵌套名字空间 569

26.6 无名名字空间 570

26.7 名字空间的别名 570

26.8 小结 572

27.1 新风格类型转换 573

27.1.1 dynamic_cast 573

第27章 新风格类型转换和运行时类型信息 573

27.1.2 static_cast 577

27.1.3 reinterpret_cast 578

27.1.4 const_cast 579

27.2 运行时类型信息 581

27.3 小结 582

第28章 区域表示 583

28.1 国际化元素 583

28.2.2 默认区域表示与全局区域表示 584

28.2.1 标准侧面 584

28.3 创建区域表示对象 584

28.2 std∷locale类 584

28.4 创建混合区域表示 587

28.5 流与区域表示 588

28.6 对侧面进行操作 589

28.7 小结 591

附录 关于光盘 592