此页面上的内容需要较新版本的 Adobe Flash Player。

获取 Adobe Flash Player

您现在的位置: 智可网 - 程序开发 - 微软开发专区 - Visual C - 正文
C++ 设计的基本原理与实践技巧浅析
教程录入:admin    责任编辑:admin 作者:佚名 文章来源:互联网

“该死的鱼雷!全速前进。”

——海军上将Farragut

程序设计是这样一门艺术, 它将问题求解方案描述成计算机可以执行的形式。程序设计中很多工作都花费在寻找求解方案以及对其求精上。通常, 只有在真正编写程序求解一个问题的过程中才会对问题本身理解透彻。

本书适合于那些从未有过编程经验但愿意努力学习程序设计的初学者, 它能帮助你理解使用C++语言进行程序设计的基本原理并获得实践技巧。我的目标是使你获得足够多的知识和经验, 以便能使用最新最好的技术进行简单有用的编程工作。达到这一目标需要多长时间呢?作为大学一年级课程的一部分, 你可以在一个学期内完成这本书的学习(假定你有另外四门中等难度的课程)。如果你是自学的话, 不要期望能花费更少的时间完成学习(一般来说, 每周15个小时, 共14周是合适的学时安排)。

三个月可能看起来是一段很长的时间, 但要学习的内容很多, 写第一个简单程序之前, 就要花费一个小时。而且, 所有学习过程都是渐进的: 每一章都会介绍一些新的有用的概念, 并通过从实际应用中获取的例子来阐述这些概念。随着学习进程的推进, 你通过程序代码表达思想的能力——也就是让计算机按你的期望工作的能力, 会逐渐稳步地提高。我从不会说: “先学习一个月的理论知识, 然后看看你是否能使用这些理论吧。”

为什么要学习程序设计呢?因为计算机文化是建立在软件之上的。如果不理解软件, 那么你将退化到只能相信“魔术”的境地, 并且将被排除在很多最为有趣、最具经济效益和社会效益的领域之外。当谈论程序设计时, 我所想到的是整个计算机程序家族, 从带有GUI(图形用户界面)的个人计算机程序, 到工程计算和嵌入式系统控制程序(如数码相机、汽车和手机中的程序), 以及文字处理程序等, 在很多日常应用和商业应用中都能看到这些程序。程序设计与数学有些相似, 如果认真去做的话, 它会是一种非常有用的智力训练, 可以锻炼我们的思考能力。然而, 由于计算机能做出反馈, 程序设计又不像大多数数学形式那么抽象, 因而对更多人来说更容易接受。可以说, 程序设计是一条能够打开你的眼界, 将世界变得更美好的途径。最后, 程序设计非常有趣。

为什么学习C++这门程序设计语言呢?学习程序设计不可能不借助一门程序设计语言, 而C++直接支持现实世界中的软件所使用的那些关键概念和技术。C++是使用最为广泛的程序设计语言之一, 其应用领域几乎没有局限。从大洋深处到火星表面, 到处都能发现C++程序的身影。C++是由一个开放的国际标准组织全面考量、精心设计的。在任何一种计算机平台上都能找到高质量的和免费的C++实现。而且, 你用C++所学到的程序设计思想, 大多数都可直接用于其他程序设计语言, 如C、C#、Fortran以及Java。最后一个原因, 我喜欢C++适合编写优美、高效的代码这一特点。

本书不是初学程序设计的简单入门教材, 我写此书的用意也不在此。我为本书设定的目标是:能让你学到基本的实用编程技术的最简单的书籍。这是一个雄心勃勃的目标, 因为很多现代软件所依赖的技术, 不过才出现短短几年时间。

我的基本假设是, 你希望编写供他人使用的程序, 并愿意认真负责地、 较高质量地完成这个工作;也就是说, 我假定你希望达到专业水准。因此, 我为本书选择的主题覆盖了开始学习实用编程技术所需要的内容, 而不只是那些容易讲授和容易学习的内容。如果某种技术是你做好基本编程工作所需要的, 那么本书就会介绍它, 同时展示用以支持这种技术的编程思想和语言工具, 并提供相应的练习, 期望你通过做这些练习来熟悉这种技术。但如果你只想了解“玩具程序”, 那么你能学到的将远比我所提供的少得多。另一方面, 我不会用一些实用性很低的内容来浪费你的时间, 本书介绍的内容都是你在实践中几乎肯定会用到的。

如果你只是希望直接使用别人编写的程序, 而不想了解其内部原理, 也不想亲自向代码中加入重要的内容, 那么本书不适合你。请考虑是否采用另一本书或另一种程序设计语言会更好些。如果这大概就是你对程序设计的看法, 那么请同时考虑一下你从何得来的这种观点, 它真的满足你的需求吗?人们常常低估程序设计的复杂程度和它的重要性。我不愿看到你不喜欢程序设计, 只是因为你的需求与我所描述的部分软件之间不匹配。信息技术世界中还有很多部分是不要求程序设计知识的, 那些领域可能适合你。本书面向的是那些确实希望编写和理解复杂计算机程序的人。

考虑到本书的结构和注重实践的特点, 它也可以作为程序设计方面的第二本书, 适合那些已经了解一点C++的人, 和那些会用其他语言编程, 现在想学习C++的人。如果你属于其中一类, 我不好估计你学习这本书要花费多长时间。但我可以给你的建议是, 多做练习。因为你在学习中常见的一个问题是习惯用熟悉的、旧的方式编写程序, 而不是在适当的地方采用新技术, 多做练习会帮助你解决这个问题。如果你曾经按某种更为传统的方式学习过C++, 那么在进行到第7章之前, 你会发现一些令你惊奇的和有用的内容。除非你的名字是Stroustrup, 否则你会发现我在本书中所讨论的内容不是“你父辈的C++”。

学习程序设计要靠编程实践。在这一点上, 程序设计与其他需要实践学习的技能是相似的。你不可能仅仅通过读书就学会游泳、演奏乐器或者开车, 你必须进行实践。同样, 不读程序、不写程序就不可能学会程序设计。本书给出了大量代码实例, 都配合有说明文字和图表。你需要通过读这些代码来理解程序设计的思想、概念和原理, 并掌握用来表达这些思想、概念和原理的程序设计语言的特性。但有一点很重要, 仅仅读代码是不能学会编程实践技巧的。为此, 你必须进行编程练习, 通过编程工具熟悉编写、编译和运行程序。你需要亲身体验编程中会出现的错误, 学习如何修改它们。总之, 在学习程序设计的过程中, 编写代码的练习是不可替代的。而且, 这也是乐趣所在!

另一方面, 程序设计远非只是遵循一些语法规则和阅读手册那么简单。本书的重点不在于C++的语法, 而在于理解基础思想、原理和技术, 这是一名好程序员所必备的。只有设计良好的代码才有机会成为一个正确、可靠和易维护的系统的一部分。而且, “基础”意味着延续性: 当现在的程序设计语言和工具演变甚至被取代后, 这些基础知识仍会保持其重要性。

那么计算机科学、软件工程、信息技术等又如何呢?它们都属于程序设计范畴吗?当然不是!但程序设计是一门基础性的学科, 是所有计算机相关领域的基础, 在计算机科学领域占有重要的地位。本书对算法、数据结构、用户接口、数据处理和软件工程等领域的重要概念和技术进行了简要介绍。但本书不能取代对这些领域全面、均衡的学习。

代码可以很有用, 同样也可以很优美。本书会帮你了解优美的代码意味着什么, 并帮你掌握构造优美代码的原理和实践技巧。祝你学习顺利!

致学生

到目前为止, 我在德州农工大学已经用本书的初稿教过1000名以上的大一新生, 其中60%曾经有过编程经历, 而剩余40%从未见过哪怕一行代码。大多数学生的学习是成功的, 所以你也可以成功。

你不一定是在某门课程中来学习本书, 我认为本书会广泛用于自学。然而, 不管你学习本书是作为课程的一部分还是自学, 都要尽量与他人协作。程序设计有一个不好的名声——它是一种个人活动, 这是不公正的。大多数人在作为一个有共同目标的团体的一份子时, 工作效果更好, 学习得更快。与朋友一起学习和讨论问题不是作弊!而是取得进步最有效, 同时也是最快乐的途径。如果没有特殊情况的话, 与朋友一起工作会促使你表达出你的思想, 这正是测试你对问题理解和确认你的记忆的最有效的方法。你没有必要独自解决所有编程语言和编程环境中的难题。但是, 请不要自欺欺人, 不去完成那些简单练习和大量的习题(即使没有老师督促你, 你也不应这样做)。记住, 程序设计(尤其)是一种实践技能, 需要通过实践来掌握。如果你不编写代码(完成每章的若干习题), 那么阅读本书就纯粹是一种无意义的理论学习。

大多数学生, 特别是那些爱思考的好学生, 有时会对自己努力工作是否值得产生疑问。当(不是如果)你产生这样的疑问时, 休息一会儿, 重新阅读这篇前言, 阅读一下第1章(“计算机、 人和程序设计”)和第22章(“思想和历史”)。在那里, 我试图阐述我在程序设计中发现了哪些令人兴奋的东西, 以及为什么我会认为程序设计是能为世界带来积极贡献的重要工具。如果你对我的教学理念和一般方法有疑问, 请阅读第0章(“致读者”)。

你可能会对本书的厚度感到担心。本书如此之厚的一部分原因是, 我宁愿反复重复一些解释说明或增加一些实例, 而不是让你自己到处找这些内容, 这应该令你安心。另外一个主要原因是, 本书的后半部分是一些参考资料和补充资料, 供你想要深入了解程序设计的某个特定领域(如嵌入式系统程序设计、 文本分析或数值计算)时查阅。

还有, 学习中请耐心些。学习任何一种重要的、有价值的新技能都要花费一些时间, 而这是值得的。

致教师

本书不是一门传统的计算机科学的101课程, 而是一本关于如何构造能实际工作的软件的书。因此本书省略了很多计算机科学系学生按惯例要学习的内容(图灵完全、 状态机、 离散数学、 乔姆斯基文法等)。硬件相关的内容也省略了, 因为我假定学生从幼儿园时代就已经通过不同途径使用过计算机了。本书也不准备涉及一些计算机科学领域最重要的主题。本书是关于程序设计的(或者更一般地, 是关于如何开发软件的), 因此关注的是少量主题的更深入的细节, 而不是像传统计算机课程那样讨论很多主题。本书试图只做好一件事, 计算机科学不是一门课程可以囊括的。如果本书(本课程)被计算机科学、计算机工程、电子工程(很多我们最早的学生都是电子专业的)、信息科学或者其他相关专业所采用, 我希望这门课程能和其他一些课程一起进行, 共同形成对计算机科学的完整介绍。

请阅读第0章, 那里有对我的教学理念、一般教学方法等的介绍。请在教学过程中尝试将这些观点传达给你的学生。

资源

本书网站的网址为wwwstroustrupcom/Programming, 其中包含了各种使用本书讲授和学习程序设计所需的辅助资料。这些资料可能会随着时间推移不断改进, 但对于初学者, 现在可以找到下面一些资料:

基于本书的讲义的幻灯片。

一本教师指南。

本书中使用的库的头文件和实现。

本书中实例的代码。

某些习题的解答。

可能有用的一些链接。

勘误表。

欢迎随时提出对这些资料的改进意见。

致谢

我要特别感谢我已故的同事和联合导师Lawrence “Pete” Peterson, 很久以前, 在我还未感受到教授初学者的惬意时, 是他鼓励我承担这项工作, 并提供了很多能令课程成功的教学经验。没有他, 这门课程的首次尝试就会失败。他参与了这门课程最初的建设, 本书就是为这门课程所着。他还和我一起反复讲授这门课程, 汲取经验, 不断改进课程和本书。在本书中我使用的“我们”这个字眼, 最初的意思就是指“Pete和我”。

我要感谢那些直接或间接帮助过我撰写本书的学生、助教以及德州农工大学讲授ENGR 112课程的教师, 以及Walter Daugherity, 他曾讲授过这门课程。还要感谢Damian Dechev、 Tracy Hammond、 Arne Tolstrup Madsen、 GabrIEl DOS Reis、 Nicholas Stroustrup、 J C van Winkel、 Greg Versoonder、 RonnIE Ward和Leor Zolman, 他们对本书初稿提出了一些建设性意见。感谢Mogens Hansen为我解释引擎控制软件。感谢Al Aho、 Stephen Edwards、 Brian Kernighan和Daisy Nguyen, 他们帮助我在夏天躲开那些分心的事来完成本书。

感谢AddisonWesley公司为我安排的审阅人: Richard Enbody、 David Gustafson、 Ron McCarty和K Narayanaswamy, 他们基于自身讲授C++课程或者大学计算机科学系101课程的经验, 对本书提出了宝贵的意见。还要感谢我的编辑Peter Gordon为本书提出的很多有价值的意见以及他极大的耐心。我非常感谢AddisonWesley公司为本书组织的制作团队的同仁, 他们为本书的高质量出版做出了很多贡献, 他们是: Julie Grady (校对)、 Chris Keane (排版)、 Rob Mauhar (插图)、 JulIE Nahil (制作编辑)和Barbara Wood (文字编辑)。

另外, 我本人对本书代码的检查很不系统, Bashar Anabtawi、 Yinan Fan和Yuriy Solodkyy使用微软C++ 71版(2003)和80版(2005)以及GCC 344版检查了所有代码片段。

我还要感谢Brian Kernighan和Doug McIlroy为程序设计类书籍的撰写定下了非常高的标准, 以及Dennis RitchIE和Kristen Nygaard为实用编程语言设计提供的非常有价值的经验。

分享
打赏我
打开支付宝"扫一扫" 打开微信"扫一扫"
客户端
"扫一扫"下载智可网App
意见反馈
C++ 设计的基本原理与实践技巧浅析
作者:佚名 来源:互联网

“该死的鱼雷!全速前进。”

——海军上将Farragut

程序设计是这样一门艺术, 它将问题求解方案描述成计算机可以执行的形式。程序设计中很多工作都花费在寻找求解方案以及对其求精上。通常, 只有在真正编写程序求解一个问题的过程中才会对问题本身理解透彻。

本书适合于那些从未有过编程经验但愿意努力学习程序设计的初学者, 它能帮助你理解使用C++语言进行程序设计的基本原理并获得实践技巧。我的目标是使你获得足够多的知识和经验, 以便能使用最新最好的技术进行简单有用的编程工作。达到这一目标需要多长时间呢?作为大学一年级课程的一部分, 你可以在一个学期内完成这本书的学习(假定你有另外四门中等难度的课程)。如果你是自学的话, 不要期望能花费更少的时间完成学习(一般来说, 每周15个小时, 共14周是合适的学时安排)。

三个月可能看起来是一段很长的时间, 但要学习的内容很多, 写第一个简单程序之前, 就要花费一个小时。而且, 所有学习过程都是渐进的: 每一章都会介绍一些新的有用的概念, 并通过从实际应用中获取的例子来阐述这些概念。随着学习进程的推进, 你通过程序代码表达思想的能力——也就是让计算机按你的期望工作的能力, 会逐渐稳步地提高。我从不会说: “先学习一个月的理论知识, 然后看看你是否能使用这些理论吧。”

为什么要学习程序设计呢?因为计算机文化是建立在软件之上的。如果不理解软件, 那么你将退化到只能相信“魔术”的境地, 并且将被排除在很多最为有趣、最具经济效益和社会效益的领域之外。当谈论程序设计时, 我所想到的是整个计算机程序家族, 从带有GUI(图形用户界面)的个人计算机程序, 到工程计算和嵌入式系统控制程序(如数码相机、汽车和手机中的程序), 以及文字处理程序等, 在很多日常应用和商业应用中都能看到这些程序。程序设计与数学有些相似, 如果认真去做的话, 它会是一种非常有用的智力训练, 可以锻炼我们的思考能力。然而, 由于计算机能做出反馈, 程序设计又不像大多数数学形式那么抽象, 因而对更多人来说更容易接受。可以说, 程序设计是一条能够打开你的眼界, 将世界变得更美好的途径。最后, 程序设计非常有趣。

为什么学习C++这门程序设计语言呢?学习程序设计不可能不借助一门程序设计语言, 而C++直接支持现实世界中的软件所使用的那些关键概念和技术。C++是使用最为广泛的程序设计语言之一, 其应用领域几乎没有局限。从大洋深处到火星表面, 到处都能发现C++程序的身影。C++是由一个开放的国际标准组织全面考量、精心设计的。在任何一种计算机平台上都能找到高质量的和免费的C++实现。而且, 你用C++所学到的程序设计思想, 大多数都可直接用于其他程序设计语言, 如C、C#、Fortran以及Java。最后一个原因, 我喜欢C++适合编写优美、高效的代码这一特点。

本书不是初学程序设计的简单入门教材, 我写此书的用意也不在此。我为本书设定的目标是:能让你学到基本的实用编程技术的最简单的书籍。这是一个雄心勃勃的目标, 因为很多现代软件所依赖的技术, 不过才出现短短几年时间。

我的基本假设是, 你希望编写供他人使用的程序, 并愿意认真负责地、 较高质量地完成这个工作;也就是说, 我假定你希望达到专业水准。因此, 我为本书选择的主题覆盖了开始学习实用编程技术所需要的内容, 而不只是那些容易讲授和容易学习的内容。如果某种技术是你做好基本编程工作所需要的, 那么本书就会介绍它, 同时展示用以支持这种技术的编程思想和语言工具, 并提供相应的练习, 期望你通过做这些练习来熟悉这种技术。但如果你只想了解“玩具程序”, 那么你能学到的将远比我所提供的少得多。另一方面, 我不会用一些实用性很低的内容来浪费你的时间, 本书介绍的内容都是你在实践中几乎肯定会用到的。

如果你只是希望直接使用别人编写的程序, 而不想了解其内部原理, 也不想亲自向代码中加入重要的内容, 那么本书不适合你。请考虑是否采用另一本书或另一种程序设计语言会更好些。如果这大概就是你对程序设计的看法, 那么请同时考虑一下你从何得来的这种观点, 它真的满足你的需求吗?人们常常低估程序设计的复杂程度和它的重要性。我不愿看到你不喜欢程序设计, 只是因为你的需求与我所描述的部分软件之间不匹配。信息技术世界中还有很多部分是不要求程序设计知识的, 那些领域可能适合你。本书面向的是那些确实希望编写和理解复杂计算机程序的人。

考虑到本书的结构和注重实践的特点, 它也可以作为程序设计方面的第二本书, 适合那些已经了解一点C++的人, 和那些会用其他语言编程, 现在想学习C++的人。如果你属于其中一类, 我不好估计你学习这本书要花费多长时间。但我可以给你的建议是, 多做练习。因为你在学习中常见的一个问题是习惯用熟悉的、旧的方式编写程序, 而不是在适当的地方采用新技术, 多做练习会帮助你解决这个问题。如果你曾经按某种更为传统的方式学习过C++, 那么在进行到第7章之前, 你会发现一些令你惊奇的和有用的内容。除非你的名字是Stroustrup, 否则你会发现我在本书中所讨论的内容不是“你父辈的C++”。

学习程序设计要靠编程实践。在这一点上, 程序设计与其他需要实践学习的技能是相似的。你不可能仅仅通过读书就学会游泳、演奏乐器或者开车, 你必须进行实践。同样, 不读程序、不写程序就不可能学会程序设计。本书给出了大量代码实例, 都配合有说明文字和图表。你需要通过读这些代码来理解程序设计的思想、概念和原理, 并掌握用来表达这些思想、概念和原理的程序设计语言的特性。但有一点很重要, 仅仅读代码是不能学会编程实践技巧的。为此, 你必须进行编程练习, 通过编程工具熟悉编写、编译和运行程序。你需要亲身体验编程中会出现的错误, 学习如何修改它们。总之, 在学习程序设计的过程中, 编写代码的练习是不可替代的。而且, 这也是乐趣所在!

另一方面, 程序设计远非只是遵循一些语法规则和阅读手册那么简单。本书的重点不在于C++的语法, 而在于理解基础思想、原理和技术, 这是一名好程序员所必备的。只有设计良好的代码才有机会成为一个正确、可靠和易维护的系统的一部分。而且, “基础”意味着延续性: 当现在的程序设计语言和工具演变甚至被取代后, 这些基础知识仍会保持其重要性。

那么计算机科学、软件工程、信息技术等又如何呢?它们都属于程序设计范畴吗?当然不是!但程序设计是一门基础性的学科, 是所有计算机相关领域的基础, 在计算机科学领域占有重要的地位。本书对算法、数据结构、用户接口、数据处理和软件工程等领域的重要概念和技术进行了简要介绍。但本书不能取代对这些领域全面、均衡的学习。

代码可以很有用, 同样也可以很优美。本书会帮你了解优美的代码意味着什么, 并帮你掌握构造优美代码的原理和实践技巧。祝你学习顺利!

致学生

到目前为止, 我在德州农工大学已经用本书的初稿教过1000名以上的大一新生, 其中60%曾经有过编程经历, 而剩余40%从未见过哪怕一行代码。大多数学生的学习是成功的, 所以你也可以成功。

你不一定是在某门课程中来学习本书, 我认为本书会广泛用于自学。然而, 不管你学习本书是作为课程的一部分还是自学, 都要尽量与他人协作。程序设计有一个不好的名声——它是一种个人活动, 这是不公正的。大多数人在作为一个有共同目标的团体的一份子时, 工作效果更好, 学习得更快。与朋友一起学习和讨论问题不是作弊!而是取得进步最有效, 同时也是最快乐的途径。如果没有特殊情况的话, 与朋友一起工作会促使你表达出你的思想, 这正是测试你对问题理解和确认你的记忆的最有效的方法。你没有必要独自解决所有编程语言和编程环境中的难题。但是, 请不要自欺欺人, 不去完成那些简单练习和大量的习题(即使没有老师督促你, 你也不应这样做)。记住, 程序设计(尤其)是一种实践技能, 需要通过实践来掌握。如果你不编写代码(完成每章的若干习题), 那么阅读本书就纯粹是一种无意义的理论学习。

大多数学生, 特别是那些爱思考的好学生, 有时会对自己努力工作是否值得产生疑问。当(不是如果)你产生这样的疑问时, 休息一会儿, 重新阅读这篇前言, 阅读一下第1章(“计算机、 人和程序设计”)和第22章(“思想和历史”)。在那里, 我试图阐述我在程序设计中发现了哪些令人兴奋的东西, 以及为什么我会认为程序设计是能为世界带来积极贡献的重要工具。如果你对我的教学理念和一般方法有疑问, 请阅读第0章(“致读者”)。

你可能会对本书的厚度感到担心。本书如此之厚的一部分原因是, 我宁愿反复重复一些解释说明或增加一些实例, 而不是让你自己到处找这些内容, 这应该令你安心。另外一个主要原因是, 本书的后半部分是一些参考资料和补充资料, 供你想要深入了解程序设计的某个特定领域(如嵌入式系统程序设计、 文本分析或数值计算)时查阅。

还有, 学习中请耐心些。学习任何一种重要的、有价值的新技能都要花费一些时间, 而这是值得的。

致教师

本书不是一门传统的计算机科学的101课程, 而是一本关于如何构造能实际工作的软件的书。因此本书省略了很多计算机科学系学生按惯例要学习的内容(图灵完全、 状态机、 离散数学、 乔姆斯基文法等)。硬件相关的内容也省略了, 因为我假定学生从幼儿园时代就已经通过不同途径使用过计算机了。本书也不准备涉及一些计算机科学领域最重要的主题。本书是关于程序设计的(或者更一般地, 是关于如何开发软件的), 因此关注的是少量主题的更深入的细节, 而不是像传统计算机课程那样讨论很多主题。本书试图只做好一件事, 计算机科学不是一门课程可以囊括的。如果本书(本课程)被计算机科学、计算机工程、电子工程(很多我们最早的学生都是电子专业的)、信息科学或者其他相关专业所采用, 我希望这门课程能和其他一些课程一起进行, 共同形成对计算机科学的完整介绍。

请阅读第0章, 那里有对我的教学理念、一般教学方法等的介绍。请在教学过程中尝试将这些观点传达给你的学生。

资源

本书网站的网址为wwwstroustrupcom/Programming, 其中包含了各种使用本书讲授和学习程序设计所需的辅助资料。这些资料可能会随着时间推移不断改进, 但对于初学者, 现在可以找到下面一些资料:

基于本书的讲义的幻灯片。

一本教师指南。

本书中使用的库的头文件和实现。

本书中实例的代码。

某些习题的解答。

可能有用的一些链接。

勘误表。

欢迎随时提出对这些资料的改进意见。

致谢

我要特别感谢我已故的同事和联合导师Lawrence “Pete” Peterson, 很久以前, 在我还未感受到教授初学者的惬意时, 是他鼓励我承担这项工作, 并提供了很多能令课程成功的教学经验。没有他, 这门课程的首次尝试就会失败。他参与了这门课程最初的建设, 本书就是为这门课程所着。他还和我一起反复讲授这门课程, 汲取经验, 不断改进课程和本书。在本书中我使用的“我们”这个字眼, 最初的意思就是指“Pete和我”。

我要感谢那些直接或间接帮助过我撰写本书的学生、助教以及德州农工大学讲授ENGR 112课程的教师, 以及Walter Daugherity, 他曾讲授过这门课程。还要感谢Damian Dechev、 Tracy Hammond、 Arne Tolstrup Madsen、 GabrIEl DOS Reis、 Nicholas Stroustrup、 J C van Winkel、 Greg Versoonder、 RonnIE Ward和Leor Zolman, 他们对本书初稿提出了一些建设性意见。感谢Mogens Hansen为我解释引擎控制软件。感谢Al Aho、 Stephen Edwards、 Brian Kernighan和Daisy Nguyen, 他们帮助我在夏天躲开那些分心的事来完成本书。

感谢AddisonWesley公司为我安排的审阅人: Richard Enbody、 David Gustafson、 Ron McCarty和K Narayanaswamy, 他们基于自身讲授C++课程或者大学计算机科学系101课程的经验, 对本书提出了宝贵的意见。还要感谢我的编辑Peter Gordon为本书提出的很多有价值的意见以及他极大的耐心。我非常感谢AddisonWesley公司为本书组织的制作团队的同仁, 他们为本书的高质量出版做出了很多贡献, 他们是: Julie Grady (校对)、 Chris Keane (排版)、 Rob Mauhar (插图)、 JulIE Nahil (制作编辑)和Barbara Wood (文字编辑)。

另外, 我本人对本书代码的检查很不系统, Bashar Anabtawi、 Yinan Fan和Yuriy Solodkyy使用微软C++ 71版(2003)和80版(2005)以及GCC 344版检查了所有代码片段。

我还要感谢Brian Kernighan和Doug McIlroy为程序设计类书籍的撰写定下了非常高的标准, 以及Dennis RitchIE和Kristen Nygaard为实用编程语言设计提供的非常有价值的经验。