C++高级编程(第2版)

生活百科 2023-01-26 08:57生活百科www.aizhengw.cn

C++高级编程(第2版)

《C++高级编程(第2版)》是2013年清华大学出版社出版的图书。

基本介绍

  • 书名C++高级编程(第2版)
  • ISBN9787302298977
  • 定价108元
  • 出版社清华大学出版社
  • 出版时间2013-12-23
  • 装帧平装

图书简介

C++是当今最流行的高级程式设计语言之一,常用于编写性能卓越的企业级面向对象程式,如游戏或大型商业软体。但一个无法规避的事实是C++语法纷繁複杂,学习难度较大。如何才能化繁为简,全面系统地快速掌握C++知识呢? C++高级编程(第2版) 将为您提供完美答案。这本权威书籍在大量实例的引导下,解密C++中鲜为人知的特性,揭示最新版本C++11带来的显着变化,并探讨有助于提高代码质量和编程效率的编程方法、可重用设计模式和良好编程风格。

目录

第Ⅰ部分专业的C++简介
第1章C++速成 3
1.1C++基础知识 3
1.1.1小程式的“helloworld” 3
1.1.2名称空间 6
1.1.3变数 8
1.1.4运算符 9
1.1.5类型 12
1.1.6条件 14
1.1.7循环 16
1.1.8数组 18
1.1.9函式 19
1.2深入研究C++ 21
1.2.1指针以及动态记忆体 21
1.2.2C++中的字元串 24
1.2.3引用 25
1.2.4异常 26
1.2.5const的多种用法 27
1.3作为面向对象语言的C++ 28
1.4标準库 30
1.5第一个有用的C++程式 31
1.5.1雇员记录系统 31
1.5.2Employee类 32
1.5.3Database类 35
1.5.4用户界面 38
1.5.5评估程式 40
1.6本章小结 41
第2章设计专业的C++程式 43
2.1程式设计概述 43
2.2程式设计的重要性 44
2.3C++设计的特点 46
2.4C++设计的两个原则 47
2.4.1抽象 47
2.4.2重用 48
2.5重用代码 49
2.5.1关于术语的说明 50
2.5.2决定是否重用代码 50
2.5.3重用代码的策略 52
2.5.4绑定第三方应用程式 56
2.5.5开放原始码库 56
2.5.6C++标準库 57
2.6设计模式以及技巧 58
2.7设计一个西洋棋程式 58
2.7.1需求 58
2.7.2设计步骤 59
2.8本章小结 63
第3章面向对象设计 65
3.1过程化的思考方式 65
3.2面向对象思想 66
3.2.1类 66
3.2.2组件 66
3.2.3属性 67
3.2.4行为 67
3.2.5综合考虑 67
3.3生活在对象世界里 68
3.3.1过度使用对象 69
3.3.2过于通用的对象 69
3.4对象之间的关係 70
3.4.1“有一个”关係 70
3.4.2“是一个”关係(继承) 71
3.4.3“有一个”与“是一个”
的区别 73
3.4.4Not-a关係 75
3.4.5层次结构 76
3.4.6多重继承 77
3.4.7混入类 78
3.5抽象 78
3.5.1接口与实现 78
3.5.2决定公开的接口 78
3.5.3设计成功的抽象 80
3.6本章小结 81
第4章设计可重用代码 83
4.1重用哲学 83
4.2如何设计可重用的代码 84
4.2.1使用抽象 84
4.2.2构建理想的重用代码 85
4.2.3设计有用的接口 89
4.2.4协调通用性以及使用性 92
4.3本章小结 93
第5章编码风格 95
5.1良好外观的重要性 95
5.1.1事先考虑 95
5.1.2良好风格的元素 96
5.2为代码编写文档 96
5.2.1使用注释的原因 96
5.2.2注释的风格 99
5.2.3本书的注释 103
5.3分解 103
5.3.1通过重构分解 104
5.3.2通过设计分解 104
5.3.3本书中的分解 104
5.4命名 104
5.4.1选择一个恰当的名称 105
5.4.2命名约定 105
5.5使用具有风格的语言特性 107
5.5.1使用常量 108
5.5.2使用引用代替指针 108
5.5.3使用自定义异常 108
5.6格式 109
5.6.1关于大括弧对齐的争论 109
5.6.2关于空格以及圆括弧的争论 110
5.6.3空格以及制表符 110
5.7风格的挑战 110
5.8本章小结 111
第Ⅱ部分专业的C++编码方法
第6章熟悉类和对象 115
6.1电子表格示例介绍 115
6.2编写类 116
6.2.1类定义 116
6.2.2定义方法 118
6.2.3使用对象 122
6.3对象的生命周期 123
6.3.1创建对象 124
6.3.2销毁对象 139
6.3.3对象赋值 140
6.3.4複製以及赋值的区别 142
6.4本章小结 144
第7章掌握类与对象 145
7.1对象的动态记忆体分配 145
7.1.1Spreadsheet类 146
7.1.2使用析构函式释放记忆体 147
7.1.3处理複製以及赋值 148
7.2定义数据成员的类型 155
7.2.1静态数据成员 155
7.2.2常量数据成员 157
7.2.3引用数据成员 158
7.2.4常量引用数据成员 159
7.3与方法有关的更多内容 159
7.3.1静态方法 159
7.3.2const方法 160
7.3.3方法重载 162
7.3.4默认参数 163
7.3.5内联方法 164
7.4嵌套类 165
7.5类内的枚举类型 167
7.6友元 168
7.7运算符重载 169
7.7.1示例为SpreadsheetCell
实现加法 169
7.7.2重载算术运算符 174
7.7.3重载比较运算符 176
7.7.4创建具有运算符重载的类型 177
7.8创建稳定的接口 178
7.9本章小结 181
第8章继承技术 183
8.1使用继承构建类 183
8.1.1扩展类 184
8.1.2重写方法 187
8.2使用继承重用代码 190
8.2.1WeatherPrediction类 190
8.2.2在子类中添加功能 191
8.2.3在子类中替换功能 192
8.3利用父类 193
8.3.1父类构造函式 193
8.3.2父类的析构函式 195
8.3.3使用父类方法 196
8.3.4向上转型以及向下转型 198
8.4继承与多态性 200
8.4.1回到电子表格 200
8.4.2设计多态性的电子表格
单元格 200
8.4.3电子表格单元格的基类 201
8.4.4独立的子类 203
8.4.5利用多态性 205
8.4.6考虑将来 206
8.5多重继承 207
8.5.1从多个类继承 207
8.5.2名称冲突以及歧义基类 208
8.6有趣而晦涩的继承问题 211
8.6.1修改重写方法的特徵 211
8.6.2继承构造函式(仅限C++11) 215
8.6.3重写方法时的特殊情况 218
8.6.4子类中的複製构造函式以及
赋值运算符 224
8.6.5virtual的真相 225
8.6.6运行时类型工具 228
8.6.7非public继承 229
8.6.8虚基类 230
8.7本章小结 231
第9章理解灵活而奇特的C++ 233
9.1引用 233
9.1.1引用变数 234
9.1.2引用数据成员 236
9.1.3引用参数 236
9.1.4引用作为返回值 238
9.1.5使用引用还是指针 238
9.1.6右值引用(仅限C++11) 241
9.2关键字的疑问 246
9.2.1const关键字 246
9.2.2static关键字 250
9.2.3非局部变数的初始化顺序 254
9.3类型以及类型转换 254
9.3.1typedef 254
9.3.2函式指针typedef 255
9.3.3类型别名(仅限C++11) 256
9.3.4类型转换 257
9.4作用域解析 261
9.5C++11 262
9.5.1统一初始化 262
9.5.2可选函式语法 264
9.5.3空指针文本 265
9.5.4尖括弧 265
9.5.5初始化列表 266
9.5.6显式转换运算符 266
9.5.7特性 267
9.5.8用户定义的字面量 268
9.6头档案 270
9.7C的实用工具 271
9.7.1变长参数列表 271
9.7.2预处理器宏 273
9.8本章小结 274
第10章错误处理 275
10.1错误与异常 275
10.1.1异常的含义 276
10.1.2C++中异常的优点 276
10.1.3C++中异常的缺点 277
10.1.4我们的建议 277
10.2异常机制 277
10.2.1抛出并捕获异常 278
10.2.2异常类型 281
10.2.3抛出并捕获多个异常 283
10.2.4未捕获的异常 285
10.2.5抛出列表 287
10.3异常与多态性 291
10.3.1标準异常体系 291
10.3.2在类层次结构中捕获异常 293
10.3.3编写自己的异常类 294
10.3.4嵌套异常(仅限C++11) 297
10.4堆叠的释放与清理 299
10.4.1使用智慧型指针 300
10.4.2捕获、清理并重新抛出 301
10.5常见的错误处理问题 301
10.5.1记忆体分配错误 301
10.5.2构造函式中的错误 304
10.5.3构造函式的
function-try-blocks 306
10.5.4析构函式中的错误 308
10.6综合套用 308
10.7本章小结 312
第11章深入探讨标準库 313
11.1编码原则 314
11.1.1使用模板 314
11.1.2使用运算符重载 317
11.2C++标準库概述 317
11.2.1字元串 317
11.2.2I/O流 318
11.2.3本地化 318
11.2.4智慧型指针 318
11.2.5异常 318
11.2.6数学工具 319
11.2.7时间工具(仅限C++11) 319
11.2.8随机数(仅限C++11) 319
11.2.9编译时有理数运算(仅限C++11) 319
11.2.10元组(仅限C++11) 319
11.2.11正则表达式(仅限C++11) 320
11.2.12标準模板库 320
11.2.13STL算法 326
11.2.14STL中还缺什幺 333
11.3本章小结 333
第12章理解容器与叠代器 335
12.1容器概述 335
12.1.1元素的需求 336
12.1.2异常和错误检查 338
12.1.3叠代器 338
12.1.4C++11的变化 340
12.2顺序容器 342
12.3容器适配器 366
12.3.1queue 366
12.3.2priority_queue 369
12.3.3stack 372
12.4关联容器 373
12.4.1pair工具类 373
12.5无序关联容器/哈希表(仅限C++11) 387
12.6其他容器 391
12.6.1标準C风格数组 392
12.6.2string 392
12.6.3流 393
12.6.4bitset 393
12.7本章小结 397
第13章掌握STL算法 399
13.1算法概述 399
13.1.1find和find_if算法 400
13.1.2accumulate算法 402
13.1.3在算法中使用C++11的移动语义 404
13.2lambda表达式(仅限C++11) 404
13.2.1语法 404
13.2.2捕捉块 406
13.2.3将lambda表达式用作返回值 406
13.2.4将lambda表达式用作参数 407
13.2.5示例 408
13.3函式对象 410
13.3.1算术函式对象 410
13.3.2比较函式对象 411
13.3.3逻辑函式对象 412
13.3.4按位函式对象(仅限C++11) 412
13.3.5函式对象适配器 413
13.3.6编写自己的函式对象 419
13.4算法详解 420
13.4.1工具算法 421
13.4.2非修改算法 422
13.4.3修改算法 428
13.4.4排序算法 436
13.4.5集合算法 438
13.5算法示例审核选民登记 440
13.5.1选民登记审核问题描述 440
13.5.2auditVoterRolls函式 440
13.5.3getDuplicates函式 441
13.5.4测试auditVoterRolls函式 443
13.6本章小结 443
第14章使用字元串与正则表达式 445
14.1动态字元串 445
14.1.1C风格字元串 446
14.1.2字元串字面量 447
14.1.3C++string类 448
14.1.4原始字元串字面量(仅限C++11) 451
14.2本地化 452
14.2.1本地化字元串字面量 452
14.2.2宽字元 453
14.2.3非西方字元集 453
14.2.4locale和facet 455
14.3正则表达式(仅限C++11) 457
14.3.1ECMAScript语法 458
14.3.2regex库 463
14.3.3regex_match() 464
14.3.4regex_search() 467
14.3.5regex_iterator 468
14.3.6regex_token_iterator 469
14.3.7regex_replace() 472
14.4本章小结 475
第15章C++I/O 477
15.1使用流 477
15.1.1流的含义 478
15.1.2流的来源和目标 478
15.1.3流式输出 479
15.1.4流式输入 483
15.1.5对象的输入输出 489
15.2字元串流 491
15.3档案流 492
15.3.1通过seek()和tell()在档案中转移 493
15.3.2将流连线在一起 495
15.4双向I/O 496
15.5本章小结 497
第16章其他库工具 499
16.1STD::FUNCTION 499
16.2有理数 501
16.3Chrono库 503
16.3.1持续时间 503
16.3.2时钟 507
16.3.3时点 508
16.4生成随机数 509
16.4.1随机数引擎 510
16.4.2随机数引擎适配器 512
16.4.3预定义的引擎和引擎适配器 512
16.4.4生成随机数 513
16.4.5随机数分布 514
16.5元组 517
16.6本章小结 520
第17章自定义和扩展STL 521
17.1分配器 521
17.2叠代器适配器 522
17.2.1反向叠代器 522
17.2.2流叠代器 524
17.2.3插入叠代器 524
17.2.4移动叠代器(仅限C++11) 525
17.3扩展STL 527
17.3.1扩展STL的原因 527
17.3.2编写一个STL算法 527
17.3.3编写一个STL容器 530
17.4本章小结 564
第Ⅲ部分掌握C++的高级特性
第18章C++运算符重载 567
18.1运算符重载概述 567
18.1.1重载运算符的原因 568
18.1.2运算符重载的限制 568
18.1.3运算符重载的决策 568
18.1.4不要重载的运算符 570
18.1.5可重载运算符小结 571
18.1.6右值引用(仅限C++11) 574
18.2重载算术运算符 574
18.2.1重载一元负号和一元正号 574
18.2.2重载递增和递减运算符 575
18.3重载按位运算符和二元逻辑运算符 577
18.4重载插入运算符和提取运算符 577
18.5重载下标运算符 579
18.5.1通过operator[]提供唯读访问 582
18.5.2非整数数组索引 583
18.6重载函式调用运算符 583
18.7重载解除引用运算符 585
18.8编写转换运算符 588
18.8.1转换运算符的多义性问题 590
18.8.2用于布尔表达式的转换 591
18.9重载记忆体分配和释放运算符 593
18.9.1new和delete的工作原理 593
18.10本章小结 599
第19章利用模板编写泛型代码 601
19.1模板概述 602
19.2类模板 602
19.2.1编写类模板 602
19.2.2编译器处理模板的原理 610
19.2.3将模板代码分布在多个档案中 611
19.2.4模板参数 612
19.2.5方法模板 614
19.2.6模板类特例化 619
19.2.7子类化模板类 622
19.2.8继承还是特例化 623
19.2.9模板别名(仅限C++11) 623
19.2.10替换函式语法(仅限C++11) 624
19.3函式模板 625
19.3.1函式模板特例化 626
19.3.2函式模板重载 627
19.3.3类模板的friend函式模板 628
19.4本章小结 629
第20章模板的高级特性 631
20.1深入了解模板参数 631
20.1.1深入了解模板类型参数 631
20.1.2模板参数模板介绍 635
20.1.3深入了解非类型模板参数 636
20.2模板类部分特例化 639
20.3通过重载模拟函式部分特例化 643
20.4模板递归 645
20.4.1一个N维格线初次尝试 645
20.4.2一个真正的N维格线 647
20.5类型推导(仅限C++11) 652
20.5.1auto关键字 652
20.5.2decltype关键字 653
20.5.3结合模板使用auto和decltype 653
20.6可变参数模板(仅限C++11) 655
20.6.1类型安全的可变长度参数列表 656
20.6.2可变数目的混入类 658
20.7元编程 659
20.7.1编译时阶乘 659
20.7.2循环展开 660
20.7.3列印元组(仅限C++11) 661
20.7.4类型trait(仅限C++11) 663
20.7.5结论 668
20.8本章小结 668
第21章高效的记忆体管理 669
21.1使用动态记忆体 669
21.1.1如何描绘记忆体 670
21.1.2分配和释放 671
21.1.3数组 672
21.1.4使用指针 679
21.2数组-指针的对偶性 681
21.2.1数组就是指针 681
21.2.2并非所有的指针都是数组 682
21.3低级记忆体操作 683
21.3.1指针运算 683
21.3.2自定义记忆体管理 684
21.3.3垃圾回收 684
21.3.4对象池 685
21.3.5函式指针 685
21.3.6方法和成员的指针 687
21.4智慧型指针 687
21.4.1旧的过时的auto_ptr 688
21.4.2新的C++11智慧型指针 688
21.4.3编写自己的智慧型指针类 692
21.5.1分配不足的字元串 697
21.5.2记忆体泄漏 698
21.5.3双重删除和无效指针 701
21.5.4访问记忆体越界 701
21.6本章小结 702
第22章C++多执行绪编程 703
22.1简介 703
22.2原子操作库 707
22.2.1原子类型示例 708
22.2.2原子操作 710
22.3执行绪 711
22.3.1通过函式指针创建执行绪 712
22.3.2通过函式对象创建执行绪 714
22.3.3通过lambda创建执行绪 715
22.3.4通过成员函式创建执行绪 716
22.3.5执行绪本地存储 717
22.3.6取消执行绪 717
22.3.7从执行绪获得结果 717
22.3.8複製和重新抛出异常 717
22.4互斥 720
22.4.1互斥体类 720
22.4.2锁 721
22.4.3std::call_once 723
22.4.4互斥体的用法示例 724
22.5条件变数 727
22.6future 729
22.7示例多执行绪日誌记录器类 731
22.8执行绪池 736
22.9执行绪设计和最佳实践 737
22.10本章小结 738
第Ⅳ部分C++软体工程
第23章充分利用软体工程方法 741
23.1过程的必要性 741
23.2软体生命周期模型 742
23.2.1分段模型和瀑布模型 742
23.2.2螺旋模型 745
23.2.3Rational统一过程 747
23.3软体工程方法学 748
23.3.1敏捷 748
23.3.2Scrum 748
23.3.3极限编程(XP) 750
23.3.4软体分流 754
23.4构建自己的过程和方法 754
23.4.1对新思想採取开放态度 754
23.4.2提出新想法 754
23.4.3知道什幺行得通什幺行不通 754
23.4.4不要逃避 755
23.5原始码控制 755
23.6本章小结 757
第24章编写高效的C++程式 759
24.1性能和效率概述 759
24.1.1提升效率的两种方式 760
24.1.2两种程式 760
24.1.3C++是不是低效的语言 760
24.2语言层次的效率 761
24.2.1高效地操纵对象 761
24.2.2使用内联方法和函式 765
24.3设计层次的效率 765
24.3.1儘可能多地快取 765
24.3.2使用对象池 766
24.4剖析 770
24.4.1使用gprof的剖析範例 770
24.4.2使用VisualC++2010的剖析範例 778
24.5本章小结 780
第25章开发跨平台和跨语言的应用程式 781
25.1跨平台开发 781
25.1.1硬体架构问题 782
25.1.2实现问题 783
25.1.3平台相关的特性 784
25.2跨语言开发 785
25.2.1混合使用C和C++ 785
25.2.2转移範例 786
25.2.3和C代码连结 788
25.2.4混合使用C#与C++ 790
25.2.5通过JNI混合Java和C++ 791
25.2.6混合C++使用Perl和shell脚本 794
25.2.7混合使用C++和彙编代码 797
25.3本章小结 798
第26章成为测试专家 799
26.1质量控制 800
26.1.1测试是谁的职责 800
26.1.2bug的生命周期 800
26.1.3bug跟蹤工具 801
26.2单元测试 802
26.2.1单元测试的方法 803
26.2.2单元测试过程 803
26.2.3单元测试实例 807
26.3更高级别的测试 813
26.3.1集成测试 813
26.3.2系统测试 815
26.3.3回归测试 815
26.4成功测试的技巧 816
26.5本章小结 816
第27章熟练掌握调试技术 819
27.1调试的基本定律 819
27.2bug分类学 820
27.3避免bug 820
27.4为bug做好规划 820
27.4.1错误日誌 821
27.4.2调试跟蹤 822
27.4.3断言 833
27.4.4静态断言(仅限C++11) 834
27.5调试技术 835
27.5.1重现bug 835
27.5.2调试可重複的bug 836
27.5.3调试不可重现的bug 836
27.5.4调试记忆体问题 837
27.5.5调试多执行绪程式 841
27.5.6调试示例文章引用 841
27.5.7从ArticleCitations示例中的教训 853
27.6本章小结 853
第28章将设计技术和框架结合使用 855
28.1C++编码示例 856
28.1.1编写一个类 856
28.1.2子类化已有的类 857
28.1.3抛出和捕获异常 858
28.1.4从档案中读取 858
28.1.5写入档案 859
28.1.6写一个模板类 859
28.2肯定有更好的方法 860
28.2.1双分派 861
28.2.2混入类 866
28.3面向对象的框架 868
28.3.1使用框架 868
28.3.2模型-视图-控制器範例 869
28.4本章小结 870
第29章套用设计模式 871
29.1叠代器模式 872
29.2单实例模式 872
29.2.1示例一种日誌机制 873
29.2.2实现一个单实例 873
29.2.3使用一个单实例 877
29.2.4单实例模式和多执行绪 877
29.3工厂模式 880
29.3.1示例汽车工厂模拟 880
29.3.2实现一个工厂 882
29.3.3使用一个工厂 884
29.3.4工厂的其他用途 885
29.4代理模式 885
29.4.1示例隐藏网路连线的问题 885
29.4.2实现一个代理 886
29.4.3使用代理 886
29.5适配器模式 887
29.5.1示例适配一个Logger类 887
29.5.2实现一个适配器 888
29.5.3使用适配器 888
29.6装饰器模式 889
29.6.1示例在网页中定义样式 889
29.6.2装饰器的实现 890
29.6.3使用一个装饰器 891
29.7责任链模式 892
29.7.1示例事件处理 892
29.7.2责任链的实现 892
29.7.3责任链的使用 893
29.8观察者模式 894
29.8.1示例事件处理 894
29.8.2观察者的实现 894
29.8.3使用观察者 895
29.9本章小结 896
附录AC++面试 897
附录B带注解的参考文献 917
附录C标準库头档案 927

Copyright@2015-2025 www.aizhengw.cn 癌症网版板所有