首页>参考读物>计算机科学与技术>软件与程序设计

C++高级编程
作者 : Nicholas A.Solter, Scott J.Kleper
译者 : 刘鑫 杨健康 等
出版日期 : 2005-12-28
ISBN : 7-111-17778-9
定价 : 88.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 687
开本 : 16开
原书名 : Professional C++
原出版社: Wrox
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书主要内容:
  ● 不同的编程方法和高质量的编程风格
  ● 充分利用C++完成大型软件开发的各种方法
  ● 确保无错代码的方法
  ● 认识面向对象设计
  ● 使用库和模式来提高编程效率、提高编程质量的若干方法
  ● C++中管理内存的最佳方法
  ● 输入/输出技术

图书特色

图书前言

多年以来,在编写速度快、功能强的企业级面向对象程序时,C++已经成为事实上的标准语言。令人惊讶的是,尽管C++变得如此普及,我们却很难全面地掌握这种语言。一些专业C++程序员会使用一些简单但功能很强大的技术,但以往传统的资料中对此都未曾提及;另外,C++中还有一些有用的部分,这些内容即使是对经验丰富的C++程序员来说可能也很神秘。
  通常,编程方面的书更多地强调语言的语法,而不注重讲述如何实际使用这种语言来编程。一般的C++书都会分章介绍C++语言的各个主要部分,来解释相关的语法,并提供一个例子。本书不打算落入这种“俗套”。一般的图书只介绍这种语言方方面面的具体细节,而不关注实践内容,本书则不同,我们的目的很明确,就是要教你如何在实际工作中使用C++。你会从书中了解到一些鲜为人知的特性,这些特性能使你的开发更为轻松;另外这里还提供了一些可重用的编码模式,专业的程序员就是因为掌握了这些模式而从初学者中脱颖而出。

本书读者对象
  即使你用C++已经很多年了,对这种语言的一些更为高级的特性可能还是不太熟悉,或者并没有充分利用到C++的全部功能。也许你编写的C++代码确实也能完成任务,但是你还想更多地了解如何完成C++设计,以及怎样才是好的编程风格。也许你是刚刚接触C++的初学者,想有一个好的起点,希望了解怎样才能“正确地”编写程序。本书将使你的C++水平更上一个台阶,达到专业水准。
  因为这本书的目的是让你进阶,从对C++只有基本或初步的了解,转变成一名专业的C++程序员,因此我们假设你对这种语言已经有一定的认识了。第1章相当于一个复习,其中介绍了C++的基本知识,不过仅凭这一章,并不能取代踏踏实实的培训和具体地使用这种语言。即使你刚开始学习C++,但C编程的经验很丰富,阅读第1章应该也够了,你需要的大多数知识都能从中找到。无论如何,你都应当有牢固的编程基础,除了应该对循环、函数和变量等内容了如指掌外,还应该知道如何组织程序的结构,对诸如递归等基本技术应该也不陌生。另外,你应当对散列表和队列等常用的数据结构有一定了解,还应该知道排序和查找等有用的算法。当然,你可以不了解面向对象编程,这部分内容将在第3章介绍。
  你可以采用任何编译器来开发代码,但必须熟悉所用的编译器。本书不会提供各种编译器的具体用法说明,你可以参考编译器随附的文档来回顾有关的内容。

本书内容
  本书提供了一种C++编程方法,这种方法不仅可以改进你的代码质量,还可以提高编程效率。本书不单单讲述C++的语法和语言特性,它还强调了一些编程方法、可重用的设计模式以及好的编程风格。其中,编程方法涵盖了整个软件开发过程,从开始设计和编写代码,到测试、调试和分组工作都有涉及。学完本书,你将掌握C++语言和它的诸多特性,并能充分利用C++的强大功能来完成大规模软件开发。
  假设有人已经学过C++的所有语法,但没有见过任何一个简单实例,这就很危险了!没有做过或看过具体的例子,他可能会认为所有代码都应当放在程序的main()函数中,或者认为所有变量都应当是全局变量,而通常这些做法都是不好的编程实践。
  专业的C++程序员除了了解C++的语法之外,还知道如何正确地使用这种语言。他们认识到好的设计极其重要,并了解面向对象编程理论,知道有哪些最佳的方法来使用现有的库。这些专业的程序员已经开发了大量有用的代码,并提出了许多可重用的思想。
  通过阅读本书,你将成为一个专业的C++程序员。你对C++的了解将更为深入,会掌握一些鲜为人知而且通常被误解的语言特性。除此以外,你将学习面向对象程序设计的内容,并获得一些高超的调试技巧。最重要的是,读过这本书后,你的脑海中会留下许多可重用思想,这些思想能够用于实际日常工作当中。
  为什么费心尽力地想要成为一个专业的C++程序员,而不是一个只了解C++皮毛的程序员,原因有很多。如果能通晓C++语言的实际工作原理,将大大改善你的代码质量。通过了解不同的编程方法和过程,将有助于你更好地与你的开发小组协作;若能发现可重用的库和常用的设计模式,将有助于提高你的日常工作效率,并避免重蹈覆辙。所有这些,都将使你成为一个更好的程序员和一个更有价值的员工。不过,就算本书没有带给你升迁之喜,多了解一些总不是坏事吧!

本书的组织结构
  本书包括6大部分。
  第一部分,“专业C++程序设计概述”,先提供C++基础知识的快速入门课程,为你奠定一定的C++基础。在入门课程之后,将分析C++设计方法。你会了解到设计的重要性、面向对象方法、库和模式的使用、代码重用的重要性,以及当前为众多编程机构所用的工程实践方法。
  第二部分,“编写C++代码方式”,这一部分从专业角度为读者提供了一次C++技术之旅。从中可了解到如何编写可读的C++代码,如何创建可重用的类,以及如何充分利用诸如继承和模板等重要的语言特性。
  第三部分,“掌握C++高级特性”,在此介绍了如何更充分地利用C++。本书这一部分展示了C++的诸多神秘之处,并介绍了如何使用这样一些更高级的特性。在这一部分中你将看到C++语言中一些不常用甚至有些古怪的部分,并了解C++中管理内存有哪些好方法,此外还将学习输入输出技术、专业级错误处理、高级的操作符重载、如何编写高效的C++代码,以及如何编写跨语言和跨平台的代码。
  第四部分,“确保无错代码”,这一部分的重点是如何编写企业质量的(enterprisequality)软件。你将了解一些软件测试概念,如单元测试和回归测试,还将学习调试C++程序时会用到的一些技术。
  第五部分,“使用库和模式”,这一部分介绍了库和模式的使用,基于库和模式的编程,不仅可以使你更省力,还可帮助你编写出更好的代码。你将了解C++提供的标准库,包括诸如扩展标准库的一些高级主题。你还将学习分布式对象、可重用C++设计技术和概念上的面向对象设计模式的有关内容。
  本书最后一部分对各章提供了一个实用指南,以方便查阅有关的C++技术。在本书相关网站上(www.wrox.com),还能找到C++标准库的一个实用参考指南。

使用本书的前提
  要使用这本书,只要有一个安装了C++编译器的计算机就足够了。不同的编译器在对C++语言的解释上往往存在差别,不过本书只关注C++中已经标准化的部分。本书中的所有程序已经在Windows、Solaris和Linux等平台上成功地通过了测试。

本书约定
  为了帮助你更充分地利用这本书,并了解会出现什么情况,我们将采用如下约定:
  诸如此类的方框提供了一些不容忘记的重要信息,这些信息与方框前后的文字有很直接的关系。
  对当前讨论的主题可能有一些提示、技巧和旁注,这些都将如此缩进并用楷体显示。

  正文中还包括以下样式:
 ●在初次介绍一些重要的词时,我们会用楷体突出强调。
 ●按键采用如下形式表示:Ctrl+A。
 ●文件名、URL和正文中出现的代码表示为:monkey.cpp。
 ●代码的表示分为两种:

  代码示例中,新出现的代码或重要代码用灰色背景突出强调。
  对当前讨论不太重要的代码,或者是前面已经出现过的代码不用灰色背景强调。

源代码
  在使用本书中的例子时,你可以手工输入所有代码,也可以直接使用本书随附的源代码文件。本书中用到的所有源代码文件都可以从wwwwroxcom下载。访问该网站时,只要找到本书的书名(可以使用搜索(Search)框,也可以使用某个书目列表),并点击该书详细信息网页上的下载代码(Download Code)链接,就可以得到本书的所有源代码。
  由于会有许多书名雷同,最快捷的方法是利用ISBN搜索,本书的ISBN是0764574841。
  下载了代码之后,只需用你最习惯的压缩工具解压即可。另外也可以前往Wrox主站的代码下载网页(wwwwroxcom/dynamic/books/downloadaspx),在此可以找到这本书以及所有其他Wrox书的可用代码。

勘误
  尽管我们竭尽所能力争文字和代码不出错,但人无完人,错误在所难免。如果你在书中发现了错误(如拼写错误或者某段代码有误),希望你能及时反馈给我们,对此我们表示深深的谢意。你所提供的勘误可能会帮助另一个读者节省大量时间,否则他可能会因为同一处错误迷惑不解,而徒劳地花费数小时想去搞清楚;与此同时,你的勘误还将有助于我们提供更高质量的书。
  要找到本书的勘误页面,请访问wwwwroxcom,并使用搜索(Search)框或者某个书目列表找到这本书的书名。然后,在本书的详细信息页面上,单击本书勘误(Book Errata)链接。在这个页面上,你将看到针对这本书提交并由Wrox编辑确认发布的所有勘误。在wwwwroxcom/miscpages/booklistshtml上还可以得到一个完整的书目列表,其中也提供了每本书的勘误。
  如果你在本书勘误(Book Errata)页面上没有找到你发现的错误,请访问wwwwroxcom/contact/techsupportshtml,填写表单,把找到的错误发送给我们。我们将检查你提供的信息,如果错误属实,我们会在本书勘误页面上发布这条信息,并在本书的后续版本中修正这个问题。

p2pwroxcom
  要与作者或其他人讨论有关C++技术问题,请加入P2P论坛(p2pwroxcom)。这个论坛是一个基于Web的系统,你可以在此发表有关Wrox图书和相关技术的消息,并与其他读者和技术用户交流。论坛提供了一个订购功能,针对你感兴趣的主题,如果论坛上新发布了相关的消息,会通过电子邮件通知你。Wrox作者、编辑、其他行业专家以及其他读者也会访问这些论坛。
  在 http:∥p2pwroxcom上,你会看到许多论坛,这些论坛不仅可以帮助你阅读本书,还有助于你开发自己的应用软件。要想加入论坛,只需遵循以下几个步骤:
  1 访问p2pwroxcom,并单击“注册”(Register)链接。
  2阅读使用条文,并单击“同意”(Agree)。
  3填写加入论坛的必要信息,如果想提供其他可选信息,也可以相应填写,单击“提交”(Submit)。
  4你将收到一个电子邮件,其中将说明如何验证你的账户,并完成加入过程。

  如果你只是阅读论坛中的消息,无须加入P2P,不过,如果你想发布自己的消息,就必须加入论坛。

  一旦加入,你就可以发布新的消息了,还可以对其他用户发布的消息做出响应。任何时刻你都可以在Web上阅读消息。如果你希望某个论坛能通过电子邮件向你发送新发布的消息,请点击论坛列表中该论坛名旁边的“订购此论坛”(Subscribe to this Forum)图标。
  要了解如何使用Wrox P2P的更多信息,请阅读P2P FAQs,在此对这个论坛软件工作的问题做了解释,另外还回答了与P2P和Wrox书有关的许多常用问题。读者若要阅读FAQs,单击任何P2P页面上的FAQ链接都可以。

致谢
  本书能成功问世,离不开许多人的帮助,为此我们也欠下了很多人情。这里要感谢Waterside Productions的David Fugate对我们的谆谆教导,还要感谢Wiley的Robert Elliot,是他让一文不名的我们有机会写出这本书,以一种全新的方式讲述C++。如果没有策划编辑Adaobi Obi Tulton的大力协助,这本书的出版可能不会像现在这么好。另外要感谢Kathryn Malm Bourgoine在编辑方面提供的帮助。封面上的照片巧妙地对我们有所美化,感谢Adam Tow拍摄的这张照片。
  还要感谢我们的所有同事和老师,是诸位多年以来一直在鼓励我们以正确的方法编写代码。特别地,我们要感谢Mike Hanson、Maggie Johnson、Adam Nash、Nick Parlante、Bob Plummer、Eric Roberts、Mehran Sahami、Bill Walker、Dan Walkowski、Patrick Young和Julie Zelenski。还要向Jerry Cain致以诚挚的谢意,是他最早教我们学C++,不仅如此,他还担任了本书的技术编辑,一丝不苟地分析了本书中的代码,认真的程度就好像在批阅我们的期末试卷一样。
  另外要感谢: Rob Baesman、Aaron Bradley、Elaine Cheung、Marni Kleper、Toli Kuznets、Akshay Rangnekar、Eltefaat Shokri、Aletha Solter、Ken Solter和Sonja Solter,各位都审阅了书中的一章甚至多章。当然,如果书中还存在错误,这都要归咎于我们自己。在此还要向各位的家人表示感谢,谢谢大家的耐心和支持。
  最后,我们还要感谢你,亲爱的读者,谢谢你打算采用我们提供的方法踏上专业C++开发的道路。

作者简介

Nicholas A.Solter, Scott J.Kleper:Nicholas A.Solter:  Nicholas A. Solter 现就职于Sun Microsystems公司,曾在斯坦福大学攻读计算机科学专业,获得理学学士和理学硕士学位。他具有丰富的C/C++编程经验和计算机游戏开发经历,并作为助理教授在Fullerton学院讲授过一年C++课程。
Scott J.Kleper:  Reactivity公司的高级软件工程师。在初中就开始了他的编程生涯,用BASIC为Tandy TRS-80编写过一些冒险游戏。在斯坦福大学就读期间,他担任过程序设计入门和面向对象程序设计等多门课程的助教;并获得了计算机科学的理学学士和硕士学位。毕业后致力于人机交互领域,担任过多家公司开发小组的首席工程师。

译者简介

刘鑫 杨健康 等:暂无简介

译者序

市场上的C++书籍可谓不少,但面向的读者大多是那些对C++已经很了解的人,还有一些C++书籍更像是参考手册,而不是真正的编程书,并没有真正教我们如何使用C++。如果读者还不精通C++,但是想利用它来解决实际问题,这本书就非常适合。它深入浅出地系统介绍了C++的各项高级主题,可以很好地帮助你成为C++专家,而且不要求你先前对C++有太多了解。
  本书除了系统、全面的内容介绍外,还讲述了程序设计实践和软件工程,这也是它的另一个闪光点。并不是每个程序员都受过软件工程和软件开发方面的培训,这本书介绍了一些非常好的实践解决方案,告诉我们如何更好地实现重用、如何更快地调试等,这对我们的实际编程尤其有意义。尽早地掌握这些编程实践经验,将有助于编程新手养成良好的编程习惯,即使是具备相当编程经验的人也可以从本书了解到使用C++的更有效方法。
  本书有以下特点:
  ●重视风格。如果不注意编程风格,尽管你完全了解C++,仍有可能写出极糟糕的C++程序,所以这本书中风格问题贯穿始终。
  ●突出重点。本书明确指出了哪些特性很难用、哪些方面很少用。由于C++是一个如此庞大的语言,所以读者要想真正掌握,必须切中要害,强调重点。
  ●强调实战。本书没有太多“玩具型”的小例子,而是提供尽可能多的实践示例,这些示例的代码都可以真正用在你的实际工作中。
  ●关注模式。利用可重用的模式可以编写出更好的代码。本书特别强调了C++程序中反复出现的一些好技术,尤其着很多笔墨来介绍一些可以重用的设计模式。
  尽管本书篇幅不短,但是读者读起来一点儿都不会吃力。另外,书中最后还附了一个面试宝典,这是一般的编程书所没有的,这也充分体现出这本书的实用价值。
  译者认为,无论本书是作为正式教材还是自学用书,都非常适合。如果你想改进代码质量,提高编程效率,成为一个专业的C++程序员,就千万不要错过这本书。
  我们衷心地感谢我们的家人和朋友。在翻译过程中,他们给予了我们莫大的关心、支持和帮助。
  全书由刘鑫、杨健康、王林绪、孙健、阎慧、熊伟、朱涛江、王宇、谢剑薇、王树春、韦群、林华君、刘名臣、赵蓓、潘淼、刘立强、龚雪晶、王志淋、刘跃邦、蔡洪量、王三梅、何跃强、苏金国、丁小峰、孙春娟、阎文丽、林琪、周兴汉、张练达等进行翻译,其中,刘鑫、杨健康担任主要翻译,王林绪、孙健等进行全书术语的审核,刘名臣、赵蓓等提供技术问题支持,全体工作人员共同完成了本书的翻译工作,最后由刘鑫统稿。
  由于时间仓促,且译者的水平有限,在翻译过程中难免会出现一些错误,请读者批评指正。

图书目录

第一部分专业C++程序设计概述
第1章C++快速入门
11C++基础
111必不可少的“Hello,World”
112命名空间
113变量
114操作符
115类型
116条件语句
117循环
118数组
119函数
1110结束语
12C++进阶
121指针和动态内存
122C++中的字符串
123引用
124异常
125const的多重用途
13作为一种面向对象语言的C++
14你的第一个实用的C++程序
141一个员工记录系统
142Employee类
143Database类
144用户界面
145对程序的评价
15小结
第2章设计专业的C++程序
21什么是编程设计
22编程设计的重要性
23C++设计有什么不同之处
24C++设计的两个原则
241抽象
242重用
25设计一个象棋程序
251需求
252设计步骤
26小结
第3章基于对象的设计
31面向对象的世界观
311我是在以过程性思维思考吗
312面向对象思想
313身处对象世界中
314对象关系
315抽象
32小结
第4章基于库和模式的设计
41重用代码
411有关术语
412决定是否重用代码
413重用代码的策略
414捆绑第三方应用
415开源库
416C++标准库
42利用模式和技术完成设计
421设计技术
422设计模式
43小结
第5章重用设计
51重用方法论
52如何设计可重用的代码
521使用抽象
522适当地建立代码结构以优化重用
523设计可用的接口
524协调一般性和易用性
53小结
第6章充分利用软件工程方法
61为什么需要过程
62软件生命期模型
621分阶段模型和瀑布模型
622螺旋方法
623统一开发过程
63软件工程方法论
631极限编程(XP)
632软件triage
64建立自己的过程和方法论
641以开放的心态接纳新思想
642汇总新思想
643明确哪些可行,哪些不可行
644不要做叛逃者
65小结
第二部分编写C++代码方式
第7章好的编码风格
71为什么代码看上去要好
711提前考虑
712保持清晰
713好的代码风格包括哪些因素
72为代码加注释
721写注释的原因
722注释风格
723本书中的注释
73分解
731通过重构来分解
732根据设计来分解
733本书中的分解
74命名
741选择一个好名字
742命名约定
75合理地使用语言特性
751使用常量
752利用const变量
753使用引用而不是指针
754使用定制异常
76格式化
761有关大括号对齐的争论
762考虑空格和小括号
763空格和制表符
77风格方面的难题
78小结
第8章掌握类和对象
81电子表格示例
82编写类
821类定义
822定义方法
823使用对象
83对象生命期
831对象创建
832对象撤销
833对象赋值
834区别复制和赋值
84小结
第9章精通类和对象
91对象中的动态内存分配
911Spreadsheet类
912用析构函数释放内存
913处理复制和赋值
92不同类型的数据成员
921静态数据成员
922const数据成员
923引用数据成员
924const引用数据成员
93深入了解方法
931静态方法
932const方法
933方法重载
934默认参数
935内联方法
94嵌套类
95友元
96操作符重载
961实现加法
962重载算术操作符
963重载比较操作符
964利用操作符重载构建类型
97方法和成员指针
98构建抽象类
99小结
第10章探索继承技术
101使用继承构建类
1011扩展类
1012覆盖方法
102继承以实现重用
1021类WeatherPrediction
1022在子类中增加功能
1023在子类中进行功能替换
103考虑父类
1031父构造函数
1032父析构函数
1033引用父类的数据
1034向上类型强制转换和向下类型强制转换
104继承以实现多态
1041Spreadsheet的返回结果
1042设计多态电子表格单元格
1043电子表格单元格的基类
1044各个子类
1045充分利用多态
1046将来的考虑
105多重继承
1051从多个类继承
1052命名冲突与二义基类
106继承技术中有趣而隐蔽的问题
1061改变覆盖方法的特性
1062覆盖方法的特殊情况
1063复制构造函数与相等操作符
1064关键字virtual的真相
1065运行时类型工具
1066非公共继承
1067虚基类
107小结
第11章利用模板编写通用代码
111模板概述
112类模板
1121编写类模板
1122编译器如何处理模板
1123模板代码在文件之间的分布
1124模板参数
1125方法模板
1126模板类特殊化
1127从模板类派生子类
1128继承与特殊化的区别
113函数模板
1131函数模板特殊化
1132函数模板的重载
1133类模板的友元函数模板
114高级模板
1141关于模板参数的更多知识
1142模板类的部分特殊化
1143用重载模板函数部分特殊化
1144模板递归
115小结
第12章理解C++疑难问题
121引用
1211引用变量
1212引用数据成员
1213引用参数
1214引用返回类型
1215采用引用还是指针
122关键字疑点
1221关键字const
1222关键字static
1223非局部变量的初始化顺序
123类型与类型强制转换
1231typedef
1232类型强制转换
124解析作用域
125头文件
126C实用工具
1261变量长度参数列表
1262预处理宏
127小结
第三部分掌握C++高级特性
第13章有效的内存管理
131使用动态内存
1311如何描述内存
1312内存的分配与撤销
1313数组
1314使用指针
132数组与指针的对应
1321数组即指针
1322指针并非都是数组
133动态字符串
1331C风格的字符串
1332字符串直接量
1333C++的字符串类
134低级的内存操作
1341指针运算
1342自定义内存管理
1343垃圾回收
1344对象池
1345函数指针
135常见的内存陷阱
1351字符串空间分配不足
1352内存泄漏
1353二次删除与无效指针
1354访问越界指针
136小结
第14章揭开C++I/O的神秘面纱
141使用流
1411到底什么是流
1412流的源与目的
1413流输出
1414流输入
1415输入与输出对象
142字符串流
143文件流
1431使用seek()与tell()
1432链接流
144双向I/O
145国际化
1451宽字符
1452非西方字符集
1453本地化环境与方面
146小结
第15章处理错误
151错误和异常
1511到底什么是异常
1512C++中的异常为什么好
1513C++中的异常为什么不好
1514我们的建议
152异常机制
1521抛出和捕获异常
1522异常类型
1523抛出和捕获多个异常
1524未捕获的异常
1525抛出列表
153异常和多态
1531标准异常层次体系
1532按类层次捕获异常
1533编写自己的异常类
154栈展开和清除
1541捕获、清除和重新抛出
1542使用智能指针
155常见的错误处理问题
1551内存分配错误
1552构造函数中的错误
1553析构函数中的错误
156综合
157小结
第四部分确保无错代码
第16章重载C++操作符361
161操作符重载概述361
1611为什么要重载操作符
1612操作符重载的限制
1613操作符重载中的选择
1614不应重载的操作符
1615可重载操作符小结
162重载算术操作符
1621重载一元减和一元加
1622重载自增和自减
163重载位操作符和二元逻辑操作符
164重载插入和析取操作符
165重载下标操作符
1651利用operator[]提供只读访问
1652非整数数组索引
166重载函数调用操作符
167重载解除引用操作符
1671实现operator*
1672实现operator->
1673到底什么是operator->*
168编写转换操作符
1681转换操作符的二义性问题
1682布尔表达式的转换
169重载内存分配和撤销操作符
1691new和delete究竟如何工作
1692重载operator new和operator delete
1693重载带额外参数的operator new 和 operator delete
1610小结
第17章编写高效的C++程序
171性能和效率概述
1711实现高效的两种方法
1712两类程序
1713C++是一种低效语言吗
172语言级效率
1721高效地处理对象
1722不要过度使用高开销的语言特性
1723使用内联方法和函数
173设计级效率
1731尽可能缓存
1732使用对象池
1733使用线程池
174测评分析
175小结
第18章开发跨平台和跨语言的应用
181跨平台开发
1811体系结构问题
1812实现问题
1813特定于平台的特性
182跨语言开发
1821混合C和C++
1822转换模式
1823与C代码的链接
1824利用JNI混合Java和C++
1825C++与Perl和Shell脚本的混合
1826C++与汇编代码的混合
183小结
第19章熟练地测试
191质量控制
1911谁来负责测试
1912bug的生命期
1913bug跟踪工具
192单元测试
1921单元测试的方法
1922单元测试过程
1923实战单元测试
193高级测试
1931集成测试
1932系统测试
1933回归测试
194成功测试的提示
195小结
第20章征服调试
201调试基本法则
202bug分类
203避免bug
204找出bug的方法
2041错误日志
2042调试轨迹
2043断言
205调试技术
2051再生bug
2052调试可再生bug
2053调试不可再生bug
2054调试内存问题
2055调试多线程程序
2056调试示例:文章引用
2057从ArticleCitations示例学到的教训
206小结
第21章深入STL:容器和迭代器
211容器概述
2111元素需求
2112异常和错误检查
2113迭代器
212顺序容器
2121vector
2122vector<bool>特殊化
2123deque
2124list
213容器适配器
2131queue
2132priority_queue
2133stack
214关联容器
2141pair工具类
2142map
2143multimap
2144set
2145multiset
215其他容器
2151数组作为STL容器
2152string作为STL容器
2153流作为STL容器
2154bitset
216小结
第五部分使用库和模式
第22章掌握STL算法和函数对象
221算法概述
2211find()和find_if() 算法
2212accumulate() 算法
222函数对象
2221算术函数对象
2222比较函数对象
2223逻辑函数对象
2224函数对象适配器
2225编写自己的函数对象
223算法细节
2231工具算法
2232非修改算法
2233修改算法
2234排序算法
2235集合算法
224算法和函数对象示例:选民注册审计
2241选民注册审计问题描述
2242auditVoterRolls()函数
2243getDuplicates()函数
2244RemoveNames函数对象
2245NameInList函数对象
2246测试auditVoterRolls()函数
225小结
第23章定制和扩展STL
231分配器
232迭代器适配器
2321逆序迭代器
2322流迭代器
2323插入迭代器
233扩展STL
2331为什么要扩展STL
2332编写STL算法
2333编写一个STL容器
234小结
第24章探讨分布式对象
241分布式计算的魅力
2411分布以获得可扩展性
2412分布以获得可靠性
2413分布以获得集中性
2414分布式内容
2415分布式vs网络式
242分布式对象
2421串行化和编组
2422远程过程调用
243CORBA
2431接口定义语言
2432实现类
2433使用对象
244XML
2441XML快速入门
2442XML作为一种分布式对象技术
2443用C++生成和解析XML
2444XML验证
2445用XML构建分布式对象
2446SOAP(简单对象访问协议)
245小结
第25章结合技术和框架
251“我想不起来如何…”
2511……编写一个类
2512……派生一个现有类
2513……抛出和捕获异常
2514……读文件
2515……写文件
2516……编写模板类
252还有更好的办法
2521带引用计数的智能指针
2522双重分派
2523混合类
253面向对象框架
2531使用框架
2532模型视图控制器模式
254小结
第26章应用设计模式
261单例模式
2611举例:日志机制
2612单例的实现2613使用单例
262工厂模式
2621举例:汽车工厂模拟
2622实现工厂
2623使用工厂
2624工厂的其他使用
263代理模式
2631举例:隐藏网络连通性问题
2632实现代理
2633使用代理
264适配器模式
2641举例:适配一个XML库
2642适配器的实现
2643使用适配器
265装饰器模式
2651举例:定义网页中的样式
2652装饰器的实现
2653使用装饰器
266职责链模式
2661举例:事件处理
2662职责链的实现
2663使用职责链
267观察者模式
2671举例:事件处理
2672实现观察者
2673使用观察者
268小结
附录
附录AC++面试宝典
附录B参考书目

教学资源推荐
作者: 郑晓薇 编著
作者: 皮德常
作者: 刁成嘉 刁 奕
作者: (美)Maurice Herlihy 布朗大学 Nir Shavit 麻省理工学院 著
参考读物推荐
作者: (美)Marijn Haverbeke 著
作者: Luke Welling, Laura Thomson
作者: IBM公司