格式:PDF
类型:扫描版
大小:22.4M
出版信息
作者: 斯特朗斯特鲁普 (Bjarne Stroustrup)
出版社: 机械工业出版社
副标题: 特别版·十周年中文纪念版
译者: 裘宗燕
出版年: 2010-3-1
页数: 905
定价: 99.00元
装帧: 平装
丛书: 计算机科学丛书
ISBN: 9787111298854
简介
本书是在C++语言和程序设计领域具有深远影响、畅销不衰的著作,由C++语言的设计者编写,对C++语言进行了最全面、最权威的论述,覆盖标准C++以及由C++所支持的关键性编程技术和设计技术。本书英文原版一经面世,即引起业内人士的高度评价和热烈欢迎,先后被翻译成德、希、匈、西、荷、法、日、俄、中、韩等近20种语言,数以百万计的程序员从中获益,是无可取代的C++经典力作。
在本书英文原版面世10年后的今天,特别奉上十周年中文纪念版,希望众多具有丰富实战经验的C++开发人员能够温故而知新,印证学习心得,了解更加本质的C++知识,让获得的理论应用得更加灵活,也期望新的C++程序员从中认识到这本书的价值所在,从更高的起点出发,书写更加精彩的程序设计人生。
目录
第1章 致读者 28
1.1本书的结构 28
1.1.1例子和参考 29
1.1.2练习 30
1.1.3有关实现的注记 30
1.2学习C++ 31
1.3 C++的设计 32
1.3.1效率和结构 33
1.3.2哲学注记 34
1.4历史注记 34
1.5 C++的使用 36
1.6 C和C++ 37
1.6.1给C程序员的建议 38
1.6.2给C++程序员的建议 38
1.7有关在C++里编程的思考 39
1.8忠告 40
1.9参考文献 41
第2章 C++概览 44
2.1为什么是C++ 44
2.2程序设计范型 44
2.3过程式程序设计 45
2.3.1变量和算术 46
2.3.2检测和循环 47
2.3.3指针和数组 48
2.4模块程序设计 48
2.4.1分别编译 49
2.4.2异常处理 50
2.5数据抽象 51
2.5.1定义类型的模块 52
2.5.2用户定义类型 53
2.5.3具体类型 54
2.5.4抽象类型 56
2.5.5虚函数 58
2.6面向对象的程序设计 58
2.6.1具体类型的问题 58
2.6.2类层次结构 59
2.7通用型程序设计 61
2.7.1容器 61
2.7.2通用型算法 62
2.8附言 63
2.9忠告 64
第3章 标准库概览 65
3.1引言 65
3.2 Hello, world! 65
3.3标准库名字空间 66
3.4输出 66
3.5字符串 67
3.5.1 C风格的字符串 69
3.6输入 69
3.7容器 71
3.7.1向量——vector 71
3.7.2范围检查 72
3.7.3表——list 73
3.7.4映射——map 74
3.7.5标准容器 74
3.8算法 75
3.8.1迭代器的使用 76
3.8.2迭代器类型 77
3.8.3迭代器和I/O 78
3.8.4遍历和谓词 79
3.8.5使用成员函数的算法 81
3.8.6标准库算法 81
3.9数学 82
3.9.1复数 82
3.9.2向量算术 82
3.9.3基本数值支持 83
3.10标准库功能 83
3.11忠告 83
第4章 类型和声明 88
4.1类型 88
4.1.1基本类型 89
4.2布尔量 89
4.3字符类型 90
4.3.1字符文字量 91
4.4整数类型 91
4.4.1整数文字量 91
4.5浮点类型 92
4.5.1浮点文字量 92
4.6大小 93
4.7void 94
4.8枚举 94
4.9声明 96
4.9.1声明的结构 97
4.9.2声明多个名字 98
4.9.3名字 98
4.9.4作用域 99
4.9.5初始化 100
4.9.6对象和左值 101
4.9.7 typedef 101
4.10忠告 102
4.11练习 102
第5章 指针、数组和结构 104
5.1指针 104
5.1.1零 105
5.2数组 105
5.2.1数组初始化 105
5.2.2字符串文字量 106
5.3到数组的指针 108
5.3.1在数组里漫游 108
5.4常量 110
5.4.1指针和常量 112
5.5引用 113
5.6指向void的指针 115
5.7结构 116
5.7.1类型等价 119
5.8忠告 119
5.9练习 119
第6章 表达式和语句 121
6.1一个桌面计算器 121
6.1.1分析器 121
6.1.2输入函数 125
6.1.3低级输入 127
6.1.4错误处理 128
6.1.5驱动程序 129
6.1.6头文件 129
6.1.7命令行参数 130
6.1.8有关风格的注记 131
6.2运算符概览 132
6.2.1结果 134
6.2.2求值顺序 135
6.2.3运算符优先级 135
6.2.4按位逻辑运算符 136
6.2.5增量和减量 137
6.2.6自由存储 138
6.2.7显式类型转换 141
6.2.8构造函数 142
6.3语句概览 143
6.3.1声明作为语句 144
6.3.2选择语句 144
6.3.3迭代语句 147
6.3.4 goto 148
6.4注释和缩进编排 148
6.5忠告 150
6.6练习 150
第7章 函数 153
7.1函数声明 153
7.1.1函数定义 153
7.1.2静态变量 154
7.2参数传递 155
7.2.1数组参数 156
7.3返回值 157
7.4重载函数名 158
7.4.1重载和返回类型 160
7.4.2重载与作用域 160
7.4.3手工的歧义性解析 160
7.4.4多参数的解析 161
7.5默认参数 162
7.6未确定数目的参数 163
7.7指向函数的指针 164
7.8宏 168
7.8.1条件编译 170
7.9忠告 170
7.10练习 171
第8章 名字空间和异常 173
8.1模块化和界面 173
8.2名字空间 175
8.2.1带限定词的名字 176
8.2.2使用声明 177
8.2.3使用指令 178
8.2.4多重界面 179
8.2.5避免名字冲突 182
8.2.6名字查找 184
8.2.7名字空间别名 184
8.2.8名字空间组合 185
8.2.9名字空问和老代码 188
8.3异常 191
8.3.1抛出和捕捉 192
8.3.2异常的辨识 193
8.3.3在计算器中的异常 194
8.4忠告 198
8.5练习 198
第9章 源文件和程序 200
9.1分别编译 200
9.2连接 201
9.2.1头文件 203
9.2.2标准库头文件 204
9.2.3单一定义规则 205
9.2.4与非C++代码的连接 207
9.2.5连接与指向函数的指针 209
9.3使用头文件 209
9.3.1单一头文件 209
9.3.2多个头文件 212
9.3.3包含保护符 216
9.4程序 217
9.4.1非局部变量的初始化 217
9.5忠告 219
9.6练习 219
第10章 类 224
10.1引言 224
10.2类 224
10.2.1成员函数 225
10.2.2访问控制 226
10.2.3构造函数 227
10.2.4静态成员 228
10.2.5类对象的复制 229
10.2.6常量成员函数 230
10.2.7自引用 230
10.2.8结构和类 233
10.2.9在类内部的函数定义 235
10.3高效的用户定义类型 235
10.3.1成员函数 237
10.3.2协助函数 239
10.3.3重载的运算符 240
10.3.4具体类型的意义 240
10.4对象 241
10.4.1析构函数 241
10.4.2默认构造函数 242
10.4.3构造和析构 243
10.4.4局部变量 243
10.4.5自由存储 245
10.4.6类对象作为成员 246
10.4.7数组 248
10.4.8局部静态存储 249
10.4.9非局部存储 250
10.4.10临时对象 251
10.4.11对象的放置 253
10.4.12联合 254
10.5忠告 255
10.6练习 255
第11章 运算符重载 258
11.1引言 258
11.2运算符函数 259
11.2.1二元和一元运算符 260
11.2.2运算符的预定义意义 261
11.2.3运算符和用户定义类型 261
11.2.4名字空问里的运算符 262
11.3一个复数类型 263
11.3.1成员运算符和非成员运算符 263
11.3.2混合模式算术 264
11.3.3初始化 265
11.3.4复制 266
11.3.5构造函数和转换 267
11.3.6文字量 268
11.3.7另一些成员函数 268
11.3.8协助函数 269
11.4转换运算符 270
11.4.1歧义性 271
11.5友元 273
11.5.1友元的寻找 274
11.5.2友元和成员 275
11.6大型对象 276
11.7基本运算符 278
11.7.1显式构造函数 278
11.8下标 280
11.9函数调用 281
11.10间接 282
11.11增量和减量 284
11.12一个字符串类 285
11.13忠告 290
11.14练习 290
第12章 派生类 293
12.1引言 293
12.2派生类 294
12.2.1成员函数 296
12.2.2构造函数和析构函数 297
12.2.3复制 298
12.2.4类层次结构 298
12.2.5类型域 299
12.2.6虚函数 301
12.3抽象类 303
12.4类层次结构的设计 305
12.4.1一个传统的层次结构 305
12.4.2抽象类 308
12.4.3其他实现方式 310
12.4.4对象创建的局部化 312
12.5类层次结构和抽象类 314
12.6忠告 314
12.7练习 314
第13章 模板 317
13.1引言 317
13.2一个简单的String模板 318
13.2.1定义一个模板 319
13.2.2模板实例化 320
13.2.3模板参数 321
13.2.4类型等价 321
13.2.5类型检查 322
13.3函数模板 323
13.3.1函数模板的参数 324
13.3.2函数模板的重载 325
13.4用模板参数描述策略 327
13.4.1默认模板参数 328
13.5专门化 329
13.5.1专门化的顺序 331
13.5.2模板函数的专门化 332
13.6派生和模板 333
13.6.1参数化和继承 334
13.6.2成员模板 335
13.6.3继承关系 336
13.7源代码组织 337
13.8忠告 339
13.9练习 339
第14章 异常处理 341
14.1错误处理 341
14.1.1关于异常的其他观点 343
14.2异常的结组 343
14.2.1派生的异常 344
14.2.2多个异常的组合 346
14.3捕捉异常 346
14.3.1重新抛出 347
14.3.2捕捉所有异常 347
14.4资源管理 349
14.4.1构造函数和析构函数的使用 350
14.4.2 auto_ptr 351
14.4.3告诫 353
14.4.4异常和new 353
14.4.5资源耗尽 354
14.4.6构造函数里的异常 356
14.4.7析构函数里的异常 357
14.5不是错误的异常 358
14.6异常的描述 359
14.6.1对异常描述的检查 360
14.6.2未预期的异常 361
14.6.3异常的映射 361
14.7未捕捉的异常 363
14.8异常和效率 364
14.9处理错误的其他方式 365
14.10标准异常 367
14.11忠告 369
14.12练习 369
第15章 类层次结构 371
15.1引言和概述 371
15.2多重继承 371
15.2.1歧义性解析 373
15.2.2继承和使用声明 374
15.2.3重复的基类 375
15.2.4虚基类 377
15.2.5使用多重继承 379
15.3访问控制 382
15.3.1保护成员 384
15.3.2对基类的访问 385
15.4运行时类型信息 386
15.4.1 dynamic_cast 388
15.4.2在类层次结构中漫游 390
15.4.3类对象的构造与析构 392
15.4.4 typeid和扩展的类型信息 393
15.4.5 RTTI的使用和误用 395
15.5指向成员的指针 396
15.5.1基类和派生类 398
15.6自由存储 399
15.6.1数组分配 400
15.6.2虚构造函数 401
15.7忠告 402
15.8练习 402
第16章 库组织和容器 406
16.1标准库的设计 406
16.1.1设计约束 407
16.1.2标准库组织 408
16.1.3语言支持 410
16.2容器设计 411
16.2.1专门化的容器和迭代器 411
16.2.2有基类的容器 413
16.2.3 STL容器 416
16.3向量 417
16.3.1类型 418
16.3.2迭代器 419
16.3.3元素访问 420
16.3.4构造函数 421
16.3.5堆栈操作 424
16.3.6表操作 426
16.3.7元素定位 428
16.3.8大小和容量 429
16.3.9其他成员函数 431
16.3.10协助函数 431
16.3.11 vector<bool> 432
16.4忠告 432
16.5练习 433
第17章 标准容器 434
17.1标准容器 434
17.1.1操作综述 434
17.1.2容器综述 437
17.1.3表示 438
17.1.4对元素的要求 438
17.2序列 441
17.2.1向量——vector 441
17.2.2表——list 441
17.2.3双端队列——deque 445
17.3序列适配器 446
17.3.1堆栈——stack 446
17.3.2队列——queue 447
17.3.3优先队列——priority_queue 448
17.4关联容器 450
17.4.1映射——map 450
17.4.2多重映射——multimap 458
17.4.3集合——set 459
17.4.4多重集合——multiset 460
17.5拟容器 460
17.5.1串——string 460
17.5.2值向量——valarray 460
17.5.3位集合——bitset 460
17.5.4内部数组 464
17.6定义新容器 464
17.6.1散列映射——hash_map 465
17.6.2表示和构造 466
17.6.3其他散列关联容器 471
17.7忠告 471
17.8练习 471
第18章 算法和函数对象 474
18.1引言 474
18.2标准库算法综述 474
18.3序列和容器 478
18.3.1输入序列 478
18.4函数对象 479
18.4.1函数对象的基类 481
18.4.2谓词 481
18.4.3算术函数对象 483
18.4.4约束器、适配器和否定器 483
18.5非修改性序列算法 488
18.5.1对每个做——for_each 488
18.5.2查找族函数 489
18.5.3计数 490
18.5.4相等和不匹配 491
18.5.5搜索 492
18.6修改性序列算法 492
18.6.1复制 493
18.6.2变换 494
18.6.3惟一化 496
18.6.4取代 498
18.6.5删除 499
18.6.6填充和生成 499
18.6.7反转和旋转 500
18.6.8交换 501
18.7排序的序列 501
18.7.1排序 501
18.7.2二分检索 502
18.7.3归并 503
18.7.4划分 504
18.7.5序列上的集合运算 504
18.8堆 505
18.9最小和最大 506
18.10排列 507
18.11 C风格算法 507
18.12忠告 508
18.13练习 508
第19章 迭代器和分配器 510
19.1引言 510
19.2迭代器和序列 510
19.2.1迭代器的操作 511
19.2.2迭代器特征类——iterator_lraits 512
19.2.3迭代器类别 513
19.2.4插入器 515
19.2.5反向迭代器 516
19.2.6流迭代器 517
19.3带检查迭代器 520
19.3.1异常、容器和算法 524
19.4分配器 525
19.4.1标准分配器 525
19.4.2一个用户定义分配器 528
19.4.3广义的分配器 530
19.4.4未初始化的存储 531
19.4.5动态存储 533
19.4.6 C风格的分配 534
19.5忠告 535
19.6练习 535
第20章 串 536
20.1引言 536
20.2字符 536
20.2.1字符特征类——char _traits 537
20.3基础串类——basic string 538
20.3.1类型 539
20.3.2迭代器 540
20.3.3元素访问 541
20.3.4构造函数 541
20.3.5错误 542
20.3.6赋值 543
20.3.7到C风格字符串的转换 544
20.3.8比较 546
20.3.9插入 547
20.3.10拼接 548
20.3.11查找 549
20.3.12替换 550
20.3.13子串 551
20.3.14大小和容量 552
20.3.15 I/O操作 552
20.3.16交换 553
20.4 C标准库 553
20.4.1 C风格字符串 553
20.4.2字符分类 555
20.5忠告 555
20.6练习 556
第21章 流 558
21.1引言 558
21.2输出 559
21.2.1输出流 560
21.2.2内部类型的输出 561
21.2.3用户定义类型的输出 563
21.3输入 565
21.3.1输入流 565
21.3.2内部类型的输入 565
21.3.3流状态 567
21.3.4字符的输入 569
21.3.5用户定义类型的输入 571
21.3.6异常 572
21.3.7流的联结 573
21.3.8哨位 574
21.4格式化 575
21.4.1格式状态 575
21.4.2整数输出 577
21.4.3浮点数输出 577
21.4.4输出域 578
21.4.5域的调整 580
21.4.6操控符 580
21.5文件流与字符串流 585
21.5.1文件流 586
21.5.2流的关闭 587
21.5.3字符串流 588
21.6缓冲 589
21.6.1输出流和缓冲区 590
21.6.2输入流和缓冲区 591
21.6.3流和缓冲区 592
21.6.4流缓冲区 592
21.7现场 596
21.7.1流回调 597
21.8 C输入/输出 598
21.9忠告 600
21.10练习 601
第22章 数值 603
22.1引言 603
22.2数值的限制 603
22.2.1表示限制的宏 605
22.3标准数学函数 605
22.4向量算术 607
22.4.1 valarray的构造 607
22.4.2 valarray的下标和赋值 608
22.4.3成员操作 609
22.4.4非成员函数 611
22.4.5切割 612
22.4.6切割数组——slice_ array 614
22.4.7临时量、复制和循环 618
22.4.8广义切割 620
22.4.9屏蔽 621
22.4.10间接数组——indirect array 621
22.5复数算术 622
22.6通用数值算法 624
22.6.1累积——accumulate 624
22.6.2内积——inner_product 625
22.6.3增量变化 625
22.7随机数 627
22.8忠告 628
22.9练习 628
第23章 开发和设计 632
23.1概述 632
23.2引言 632
23.3目的与手段 634
23.4开发过程 636
23.4.1开发循环 638
23.4.2设计目标 640
23.4.3设计步骤 641
23.4.4试验和分析 648
23.4.5测试 650
23.4.6软件维护 650
23.4.7效率 651
23.5管理 651
23.5.1重用 652
23.5.2规模 653
23.5.3个人 654
23.5.4混成设计 655
23.6带标注的参考文献 656
23.7忠告 658
第24章 设计和编程 660
24.1概述 660
24.2设计和程序设计语言 660
24.2.1忽视类 662
24.2.2忽视继承 663
24.2.3忽视静态类型检查 663
24.2.4忽视程序设计 666
24.2.5排他性地使用类层次结构 667
24.3类 668
24.3.1类表示什么 668
24.3.2类层次结构 669
24.3.3包容关系 673
24.3.4包容和继承 674
24.3.5使用关系 678
24.3.6编入程序里的关系 679
24.3.7类内的关系 681
24.4组件 686
24.4.1模板 688
24.4.2界面和实现 690
24.4.3肥大的界面 692
24.5忠告 693
第25章 类的作用 695
25.1类的种类 695
25.2具体类型 697
25.2.1具体类型的重用 697
25.3抽象类型 699
25.4结点 701
25.4.1修改界面 702
25.5动作 705
25.6界面类 706
25.6.1调整界面 708
25.7句柄类 709
25.7.1句柄上的操作 712
25.8应用框架 713
25.9忠告 714
25.10练习 715
附录和索引 720
附录A语法 720
附录B兼容性 738
附录C技术细节 749
附录D现场 784
附录E标准库的异常时安全性 840