现在的位置: 首页 > 综合 > 正文

wrox经典红皮书:C++高级编程(第2版)

2014年05月21日 ⁄ 综合 ⁄ 共 19249字 ⁄ 字号 评论关闭

书        名:

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

书        号:

9787302298977

出   版  社:

清华大学出版社

定        价:

108.00元

出 版 日 期:

2012-10-01

作        者:

(比)格莱戈尔(美)索尔特(美)凯乐普

译         者:

侯普秀郑思遥

系 列书 名:

清图程序设计系列

开         本:

16 开

页        数:

 

印 刷 时 间:

2012-10-01

字        数:

1603千字

版         次:

1

包        装:

平装

印         次:

1

 

内容简介:

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

主要内容:

◆ 提供详尽的代码范例,读者可随手在自己的代码中使用这些代码

◆ 全面介绍C++和STL技术,包括该语言不寻常和怪异的方面

◆ 展示应用C++语言高级特性的最佳实践,包括操作符重载、内存管理、制作模板和编写多线程代码

◆ 讨论编写跨语言和跨平台代码的技术

◆ 讲述代码重用的重要性以及编写易读C++代码的微妙之处

 

原书书名: Professional C++, Second Edition
原书书号: 978-0-470-93244-5
原书国家: 美国
原出版社: Wiley

样章试读:http://www.tupbook.com/BookView.aspx?id=106

目录:

第Ⅰ部分  专业的C++简介

第1章  C++速成 / 3
        1.1  C++基础知识 / 3
                1.1.1  小程序的“hello world” / 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.2  C++中的字符串 / 24
                1.2.3  引用 / 25
                1.2.4  异常 / 26
                1.2.5  const的多种用法 / 27
        1.3  作为面向对象语言的C++ / 28
        1.4  标准库 / 30
        1.5  第一个有用的C++程序 / 31
                1.5.1  雇员记录系统 / 31
                1.5.2  Employee类 / 32
                1.5.3  Database类 / 35
                1.5.4  用户界面 / 38
                1.5.5  评估程序 / 40
                1.6  本章小结 / 41

第2章  设计专业的C++程序 / 43
        2.1  程序设计概述 / 43
        2.2  程序设计的重要性 / 44
        2.3  C++设计的特点 / 46
        2.4  C++设计的两个原则 / 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.6  C++标准库 / 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.4  Not-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.1  Spreadsheet类 / 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.2  const方法 / 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.1  WeatherPrediction类 / 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.5  virtual的真相 / 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.1  const关键字 / 246
                9.2.2  static关键字 / 250
                9.2.3  非局部变量的初始化顺序 / 254
        9.3  类型以及类型转换 / 254
                9.3.1  typedef / 254
                9.3.2  函数指针typedef / 255
                9.3.3  类型别名(仅限C++11) / 256
                9.3.4  类型转换 / 257
        9.4  作用域解析 / 261
        9.5  C++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.7  C的实用工具 / 271
                9.7.1  变长参数列表 / 271
                9.7.2  预处理器宏 / 273
        9.8  本章小结 / 274

第10章  错误处理 / 275
        10.1  错误与异常 / 275
                10.1.1  异常的含义 / 276
                10.1.2  C++中异常的优点 / 276
                10.1.3  C++中异常的缺点 / 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.2  C++标准库概述 / 317
                11.2.1  字符串 / 317
                11.2.2  I/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.13  STL算法 / 326
                11.2.14  STL中还缺什么 / 333
        11.3  本章小结 / 333

第12章  理解容器与迭代器 / 335
        12.1  容器概述 / 335
                12.1.1  元素的需求 / 336
                12.1.2  异常和错误检查 / 338
                12.1.3  迭代器 / 338
                12.1.4  C++11的变化 / 340
        12.2  顺序容器 / 342
                12.2.1  vector / 342
                12.2.2  vector<bool>特化 / 359
                12.2.3  deque / 359
                12.2.4  list / 360
                12.2.5  array(仅限C++11) / 364
                12.2.6  forward_list(仅限C++11) / 364
        12.3  容器适配器 / 366
                12.3.1  queue / 366
                12.3.2  priority_queue / 369
                12.3.3  stack / 372
        12.4  关联容器 / 373
                12.4.1  pair工具类 / 373
                12.4.2  map / 374
                12.4.3  multimap / 382
                12.4.4  set / 385
                12.4.5  multiset / 387
        12.5  无序关联容器/哈希表(仅限C++11) / 387
                12.5.1  哈希函数 / 387
                12.5.2  unordered_map / 388
                12.5.3  unordered_multimap / 391
                12.5.4  unordered_set/unordered_multiset / 391
        12.6  其他容器 / 391
                12.6.1  标准C风格数组 / 392
                12.6.2  string / 392
                12.6.3  流 / 393
                12.6.4  bitset / 393
        12.7  本章小结 / 397

第13章  掌握STL算法 / 399
        13.1  算法概述 / 399
                13.1.1  find和find_if算法 / 400
                13.1.2  accumulate算法 / 402
                13.1.3  在算法中使用C++11的移动语义 / 404
        13.2  lambda表达式(仅限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.2  auditVoterRolls函数 / 440
                13.5.3  getDuplicates函数 / 441
                13.5.4  测试auditVoterRolls函数 / 443
        13.6  本章小结 / 443

第14章  使用字符串与正则表达式 / 445
        14.1  动态字符串 / 445
                14.1.1  C风格字符串 / 446
                14.1.2  字符串字面量 / 447
                14.1.3  C++ 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.4  locale和facet / 455
        14.3  正则表达式(仅限C++11) / 457
                14.3.1  ECMAScript语法 / 458
                14.3.2  regex库 / 463
                14.3.3  regex_match() / 464
                14.3.4  regex_search() / 467
                14.3.5  regex_iterator / 468
                14.3.6  regex_token_iterator / 469
                14.3.7  regex_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.1  STD::FUNCTION / 499
        16.2  有理数 / 501
        16.3  Chrono库 / 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.7.1  实现operator* / 586
                18.7.2  实现operator-> / 587
                18.7.3  operator ->*的含义 / 588
        18.8  编写转换运算符 / 588
                18.8.1  转换运算符的多义性问题 / 590
                18.8.2  用于布尔表达式的转换 / 591
        18.9  重载内存分配和释放运算符 / 593
                18.9.1  new和delete的工作原理 / 593
                18.9.2  重载operator new和operator delete / 595
                18.9.3  重载带有额外参数的operator new和operator delete / 597
                18.9.4  显式地删除/默认化operator new和operator delete(仅限C++11) / 599
        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.1  auto关键字 / 652
                20.5.2  decltype关键字 / 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  内存常见的陷阱 / 697
                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.3  std::call_once / 723
                22.4.4  互斥体的用法示例 / 724
        22.5  条件变量 / 727
        22.6  future / 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.3  Rational统一过程 / 747
        23.3  软件工程方法学 / 748
                23.3.1  敏捷 / 748
                23.3.2  Scrum / 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.3  C++是不是低效的语言 / 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  使用Visual C++ 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.2  bug的生命周期 / 800
                26.1.3  bug跟踪工具 / 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.2  bug分类学 / 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.1   C++编码示例 / 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

附录A  C++面试 / 897

附录B  带注解的参考文献 / 917

附录C  标准库头文件 / 927

 

 

抱歉!评论已关闭.