C++编程惯用法——高级程序员常用方法和技巧
基本信息
- 原书名: C++ Strategies and Tactics
- 原出版社: Addison Wesley
内容简介回到顶部↑
书籍
计算机书籍
在本书中,c++专家rob murray就与我们分享了他宝贵的经验和建议,以帮助初中级c++程序员得到进一步的提高。 作者大量采用了实际开发中的代码来作为示例,向读者展示了那些有用的编程策略,并对那些有害的做法进行了警示。为了帮助读者更好地理解,在书中的每一章结束前,在该章中被介绍过的主要内容都被放到了一个列表中,此外,书中还给出了一些问题来激励读者们进行更多的思考和讨论。
本书在一开始就向我们讲解了如何为我们的设计选择正确的抽象,提示我们注意抽象和实现之间的区别—然后,我们就将学到如何将己得到的抽象转化成一个(或多个)c++中的类,期间进行的讨论所涵盖的范围上至高层的设计策略,下至底层的接口和实现细节。
对于c++中新增的模板特性,通过从基础开始到逐步地接触实际应用中的示例,rob murray向我们展示了其空前的洞察力。作者同时也向我们展示了多种特定的技巧,以使我们的程序更快、重用性更高,并且更健壮。异常是c++中另外一个新增的特性,对于何时该使用它,何时不该使用它,murray也向我们给出了他的建议-在本书的最后,我们还可以学到如何将一个项目从c移植到c++之上,书中对该过程的讨论不但包括了其中可能出现的技术问题,也包括了使用技术的“人”的问题。
作者[font color="#ff0000"]robert b.murray[/font]在撰写该书时是量子数据系统公司(quantitative data systems)中负责软件工程的副总裁,该公司的业务包括向财富500强(fodune 500)中的公司提供面向对象的软件解决方案 在此之前,他曾经在at&t的bell实验室工作,在那里他参与了c++语言、编译器以及库的开发。他同时也是《the c++ report》杂志的创立编辑(founding editor),主持obfuscated c++专栏。从1987年起,他就开始在学术会议和专业会议上向人教授c++语言。目前murray在fnis公司进行着软件开发的管理,他的兴趣主要包括:程序语言的开发和工具,以及轻量级的开发过程(如极限编程)
译者[font color="#ff0000"]王昕[/font] 自1995年起接触c++编程,参与过多个c++项目的开发。曾在网上和杂志上发表过多篇有关c++的 文章。主要兴趣包括:程序语言的开发、形式化理论、软件开发方法学等。
计算机书籍
在本书中,c++专家rob murray就与我们分享了他宝贵的经验和建议,以帮助初中级c++程序员得到进一步的提高。 作者大量采用了实际开发中的代码来作为示例,向读者展示了那些有用的编程策略,并对那些有害的做法进行了警示。为了帮助读者更好地理解,在书中的每一章结束前,在该章中被介绍过的主要内容都被放到了一个列表中,此外,书中还给出了一些问题来激励读者们进行更多的思考和讨论。
本书在一开始就向我们讲解了如何为我们的设计选择正确的抽象,提示我们注意抽象和实现之间的区别—然后,我们就将学到如何将己得到的抽象转化成一个(或多个)c++中的类,期间进行的讨论所涵盖的范围上至高层的设计策略,下至底层的接口和实现细节。
对于c++中新增的模板特性,通过从基础开始到逐步地接触实际应用中的示例,rob murray向我们展示了其空前的洞察力。作者同时也向我们展示了多种特定的技巧,以使我们的程序更快、重用性更高,并且更健壮。异常是c++中另外一个新增的特性,对于何时该使用它,何时不该使用它,murray也向我们给出了他的建议-在本书的最后,我们还可以学到如何将一个项目从c移植到c++之上,书中对该过程的讨论不但包括了其中可能出现的技术问题,也包括了使用技术的“人”的问题。
作者[font color="#ff0000"]robert b.murray[/font]在撰写该书时是量子数据系统公司(quantitative data systems)中负责软件工程的副总裁,该公司的业务包括向财富500强(fodune 500)中的公司提供面向对象的软件解决方案 在此之前,他曾经在at&t的bell实验室工作,在那里他参与了c++语言、编译器以及库的开发。他同时也是《the c++ report》杂志的创立编辑(founding editor),主持obfuscated c++专栏。从1987年起,他就开始在学术会议和专业会议上向人教授c++语言。目前murray在fnis公司进行着软件开发的管理,他的兴趣主要包括:程序语言的开发和工具,以及轻量级的开发过程(如极限编程)
译者[font color="#ff0000"]王昕[/font] 自1995年起接触c++编程,参与过多个c++项目的开发。曾在网上和杂志上发表过多篇有关c++的 文章。主要兴趣包括:程序语言的开发、形式化理论、软件开发方法学等。
作译者回到顶部↑
本书提供作译者介绍
Robert B.Murray在撰写该书时是量子数据系统公司(Quantitative Data Systems)中负责软件工程的副总裁,该公司的业务包括向财富500强(Fortune 500)中的公司提供面向对象的软件解决方案。在此之前,他曾经在AT & T的Bell实验室工作,在那里他参与了C++语言、编译器以及库的开发。他同时也是《The C++ Report》杂志的创立编辑(founding editor),主持Obfuscated C++专栏。从1987年起,他就开始在学术会议和专业会议上向人教授C++语言。目前Murray在FNIS公司进行着软件开发的管理,他的兴趣主要包括.. << 查看详细
目录回到顶部↑
代译者序
序
第0章 简介
0.1 关于示例代码
0.2 本书的组织
0.3 问题
0.4 语言规则
第1章 抽象
1.1 有关电话号码的抽象模型
1.2 抽象模型间的关系
1.3 请考虑边界条件
1.4 使用crc卡片来辅助设计
1.5 小结
1.6 问题
第2章 类
2.1 构造函数
2.2 赋值
2.3 公用数据
2.4 隐式类型转换
2.5 操作符重载:成员或非成员?
序
第0章 简介
0.1 关于示例代码
0.2 本书的组织
0.3 问题
0.4 语言规则
第1章 抽象
1.1 有关电话号码的抽象模型
1.2 抽象模型间的关系
1.3 请考虑边界条件
1.4 使用crc卡片来辅助设计
1.5 小结
1.6 问题
第2章 类
2.1 构造函数
2.2 赋值
2.3 公用数据
2.4 隐式类型转换
2.5 操作符重载:成员或非成员?
译者序回到顶部↑
“It is one of those books that every professional C++ programmer should have read as it is full of good advice based on a wealth of experience.”——ACCU主席Francis Glassborow
是的,上面的评价就是ACCU主席对于你现在手头上的这本书的评价。现在世面上关于C++的书籍种类之多,可谓浩如繁星,但能够得到Francis Glassborow亲自介绍并且给出“Highly Recommended”这一最高推荐度的C++书籍,不过几本而已,而这本就是其中之一。
作为一种支持多种设计范型的通用程序设计语言,C++程序设计语言自身所特有的内涵以及外延都决非一两出色的书籍所能包含亦或一两年艰苦的学习所能掌握的。究其原因就是因为在使用C++语言的过程中,你会拥有太多的选择。无论是在用C++进行设计或者实现,做出正确的选择都决非易事。非常多的C++书籍都只是详细地介绍了语言的特性,即使是某些口碑良好的读本,也同样只是在传教语言本身却忽视了告诉读者如何在使用C++的过程中去做出正确的选择。而这本书却在这个关键方面有着出色的表现。从这一方面来说,这本书是为那些严肃的以及真正书写C++代码的程序员准备的。
从本书中,你不会学习到什么是左值,什么是循环,什么是类。因为这本书理想的读者是那些已经具备了一定C++基础,期望并且正在迈向C++专家之路的程序员。尽管本书的作者在一开始就已经表明了没有人可以仅仅通过阅读此书而成为专家,但是以我对这本书的观点来看,作者Rob Murray无疑是在以自己数十年的专家经验为大家铺设一条通往专家的大道,这也正印证了那句经典——“师傅领进门,修行靠个人”。
那么到底该如何给这本书定位呢?一位使用了C++数十年的专家写成的一本关于如何在C++中做出正确选择的专家级读本,这就是我心目中给此书的定位。在购买此书之前,你应该至少阅读过一本关于C++语言的书籍,但无需对C++有很深刻的认识,因为这正是此书想要达到的目的。如果你曾经阅读过《C++沉思录》,那么这本书的程度和那一本在某种意义上是一致的,因为它们都不是关于语言介绍的,而都是关于如何使用C++的。并且同样的在书中遍布了许多关于如何使用C++进行更好编程的真知灼见。
在这里,我还给大家一点阅读方面的建议。本书本身是按照主题来组织的,也就是说一个章节一般都是独立地说明了C++方面的某一个主题,并且给出了详细的解释以及说明。这样,阅读本书就并不需要循序而来,你可以一上来就选择你所感兴趣的主题章节进行阅读,不过我还是建议大家在阅读之前首先好好地熟读第一章。这一章是关于抽象(Abstraction)的,关于抽象这一主题的说明并不十分常见于一般的编程书籍或者语言介绍书籍中。然而,抽象这个与编程有着本质联系的概念对于培养良好的程序观有着不可替代的作用。此书中关于抽象概念的说明虽然不是很深入,却非常直观和易于理解,我想在拥有了一个良好的抽象概念后,再去细细品味书中所提到的其他关于C++的一切是有好处的。
最后,我还想单独地挑出书中的一章来谈谈我的看法。此书第9章标题非常醒目——重用(Reusability),软件工程中的一个核心而又敏感的词汇。在一本C++书籍中,对如此主题进行论述是否合适?这也是我拿到书稿看过目录后的第一反应。因为重用这个话题决不是一两句话、一两个章节可以说清楚的,如此一来,如果作者没有很好的技术功底以及文字能力,这样的章节只可能沦落成“食之无味、弃之可惜”的鸡肋。在我个人阅读过的许多书籍中,这种现象常常见到,以至于现在我会把一本书是否包含了鸡肋章节作为评价一本书好坏的重要标准之一。然而,在详细地读过这一章节之后(这是我在阅读这本书的过程中看的第2章,第1章就是关于抽象的那章。是的,我个人是按照主题来阅读此书的),我想我的疑虑全部都被打消了。作者Rob Murray不愧是程序设计领域内的专家人物,可谓深谙重用之道,而其叙述手段更是精彩,首先从重用的目标以及发现说起,再一步步结合C++语言的实现方式对多个主题进行了深入浅出的论述,其对软工学中重用的概念以及C++的多个实现主题之间的结合可谓完美。在和此书译者王昕先生的私下交谈中,译者多次提到这一章也是让他本人最受益的,一个使用C++已经有八年之久的程序员尚能从中获益,我相信一般读者在深刻理解了本章内容后一定会有同样的感觉。在我眼里这一章的内容就已经对得起读者对此书的所有投资了。
关于此书作者及译者,书底有很好的介绍,我也就不再着墨了。书没有最好的,只有最适合自己的,在我说了这么多之后,这本书是否适合你,还是需要你自己做出判断,但再一次看看Francis Glassborow对此书的另外一条评价也许能让你更快并且正确地做出买与不买的选择,就像这本书将会告诉你更多关于C++使用上的该与不该一样。
“Get a copy,read it and pass it on.Get your own copy if you want to keep ahead of your
colleagues.”——ACCU主席Francis Glassborow
倪 硕
于长沙中南大学
是的,上面的评价就是ACCU主席对于你现在手头上的这本书的评价。现在世面上关于C++的书籍种类之多,可谓浩如繁星,但能够得到Francis Glassborow亲自介绍并且给出“Highly Recommended”这一最高推荐度的C++书籍,不过几本而已,而这本就是其中之一。
作为一种支持多种设计范型的通用程序设计语言,C++程序设计语言自身所特有的内涵以及外延都决非一两出色的书籍所能包含亦或一两年艰苦的学习所能掌握的。究其原因就是因为在使用C++语言的过程中,你会拥有太多的选择。无论是在用C++进行设计或者实现,做出正确的选择都决非易事。非常多的C++书籍都只是详细地介绍了语言的特性,即使是某些口碑良好的读本,也同样只是在传教语言本身却忽视了告诉读者如何在使用C++的过程中去做出正确的选择。而这本书却在这个关键方面有着出色的表现。从这一方面来说,这本书是为那些严肃的以及真正书写C++代码的程序员准备的。
从本书中,你不会学习到什么是左值,什么是循环,什么是类。因为这本书理想的读者是那些已经具备了一定C++基础,期望并且正在迈向C++专家之路的程序员。尽管本书的作者在一开始就已经表明了没有人可以仅仅通过阅读此书而成为专家,但是以我对这本书的观点来看,作者Rob Murray无疑是在以自己数十年的专家经验为大家铺设一条通往专家的大道,这也正印证了那句经典——“师傅领进门,修行靠个人”。
那么到底该如何给这本书定位呢?一位使用了C++数十年的专家写成的一本关于如何在C++中做出正确选择的专家级读本,这就是我心目中给此书的定位。在购买此书之前,你应该至少阅读过一本关于C++语言的书籍,但无需对C++有很深刻的认识,因为这正是此书想要达到的目的。如果你曾经阅读过《C++沉思录》,那么这本书的程度和那一本在某种意义上是一致的,因为它们都不是关于语言介绍的,而都是关于如何使用C++的。并且同样的在书中遍布了许多关于如何使用C++进行更好编程的真知灼见。
在这里,我还给大家一点阅读方面的建议。本书本身是按照主题来组织的,也就是说一个章节一般都是独立地说明了C++方面的某一个主题,并且给出了详细的解释以及说明。这样,阅读本书就并不需要循序而来,你可以一上来就选择你所感兴趣的主题章节进行阅读,不过我还是建议大家在阅读之前首先好好地熟读第一章。这一章是关于抽象(Abstraction)的,关于抽象这一主题的说明并不十分常见于一般的编程书籍或者语言介绍书籍中。然而,抽象这个与编程有着本质联系的概念对于培养良好的程序观有着不可替代的作用。此书中关于抽象概念的说明虽然不是很深入,却非常直观和易于理解,我想在拥有了一个良好的抽象概念后,再去细细品味书中所提到的其他关于C++的一切是有好处的。
最后,我还想单独地挑出书中的一章来谈谈我的看法。此书第9章标题非常醒目——重用(Reusability),软件工程中的一个核心而又敏感的词汇。在一本C++书籍中,对如此主题进行论述是否合适?这也是我拿到书稿看过目录后的第一反应。因为重用这个话题决不是一两句话、一两个章节可以说清楚的,如此一来,如果作者没有很好的技术功底以及文字能力,这样的章节只可能沦落成“食之无味、弃之可惜”的鸡肋。在我个人阅读过的许多书籍中,这种现象常常见到,以至于现在我会把一本书是否包含了鸡肋章节作为评价一本书好坏的重要标准之一。然而,在详细地读过这一章节之后(这是我在阅读这本书的过程中看的第2章,第1章就是关于抽象的那章。是的,我个人是按照主题来阅读此书的),我想我的疑虑全部都被打消了。作者Rob Murray不愧是程序设计领域内的专家人物,可谓深谙重用之道,而其叙述手段更是精彩,首先从重用的目标以及发现说起,再一步步结合C++语言的实现方式对多个主题进行了深入浅出的论述,其对软工学中重用的概念以及C++的多个实现主题之间的结合可谓完美。在和此书译者王昕先生的私下交谈中,译者多次提到这一章也是让他本人最受益的,一个使用C++已经有八年之久的程序员尚能从中获益,我相信一般读者在深刻理解了本章内容后一定会有同样的感觉。在我眼里这一章的内容就已经对得起读者对此书的所有投资了。
关于此书作者及译者,书底有很好的介绍,我也就不再着墨了。书没有最好的,只有最适合自己的,在我说了这么多之后,这本书是否适合你,还是需要你自己做出判断,但再一次看看Francis Glassborow对此书的另外一条评价也许能让你更快并且正确地做出买与不买的选择,就像这本书将会告诉你更多关于C++使用上的该与不该一样。
“Get a copy,read it and pass it on.Get your own copy if you want to keep ahead of your
colleagues.”——ACCU主席Francis Glassborow
倪 硕
于长沙中南大学
序言回到顶部↑
在专家看来,C++可以帮助软件设计者和程序员构造出模块化、易维护以及高性能的系统。然而,对新手来说,这门语言的复杂程度是一个不小的威胁。在C++中有着许多不同的语言特性,只有具有一定经验之后,我们才会知道各种特性的适用情况。
本书的目的就是加速读者的这种学习进程。大部分成功的C++程序员并不会简单地从语言规则中复述出某些章节或是条款,相反,他们总是习惯于自己以往工作中所获得的行之有效的那些惯用法和技巧。我们的目的就是帮助那些C++的新手学习到那些在实践中最有效的惯用法。同时,我们也会在书中指出那些我们经常接触到的C++缺陷。
在本书中,我们的讨论并不试图覆盖整个语言,那些有关语言语义的精确定义可以查看参考手册。我们主要帮助读者构造出可以被那些不是C++语言专家的人所理解的程序。我们不但讨论了那些使程序变得优雅及高效的技巧,也展示了如何使它们更容易被理解和维护的方法。
致谢
本书中的想法和编程惯用法几乎都不是我发明的。我的目的就是把它们(在我8年的C++使用过程中从其他人那学到的并被我认为是最重要的策略和战术)用一种C++新手也能学会的方式展现给读者。这些收获中的部分来自于实际的开发项目中(这些项目被我们从C移植到C++上)的经验,另外一些则来自于和其他高手的讨论。
关于模板以及函数库设计的许多好的想法(包括那些隐藏在本书所给出的容器类后的想法)都来自于最初由Martin Carroll、Andrew Koenig以及Jonathan Shopiro所设计的USL标准组件库中的类。对于在本书中出现的任何错误,则都由我负责。Andrew Koenig是一个C++语言专家,他对我的帮助非常大。另外,那些参与过我所举行过的几期“C++策略与战术”研讨会的人也帮助启发了我书写本书,并对书中的想法进行提炼。其他的重要的想法来自于Tom Cargill、John Carolan、Jim Coplien、Mark Linton、Gerald Schwarz,当然,还有Bjarne Stroustrup,要不是他发明了C++语言,本书也就不可能出现了。
Brian Kernighan阅读过本书的多次草稿,他极好的反馈意见起了很大的帮助作用。同时我还要感谢David Annatone、Steve Buroff、Tom Cargill、Bill Hopkins、Cay Horstman、Lorraine Juhl、Peter Juhl、Stan Lippman、Dennis Mancl、Scott Meyers、Barbara Moo、Lorraine Weisbrot Murray、Bjarne Stroustrup、Clovis Tondo、Steve Vinoski以及Christopher Van Wyk,他们对本书早期的草稿提出了意见。此外,Lorraine Weisbrot Murray对我的鼓励、理解、支持以及爱使得这一切努力都成为了可行的。
本书的目的就是加速读者的这种学习进程。大部分成功的C++程序员并不会简单地从语言规则中复述出某些章节或是条款,相反,他们总是习惯于自己以往工作中所获得的行之有效的那些惯用法和技巧。我们的目的就是帮助那些C++的新手学习到那些在实践中最有效的惯用法。同时,我们也会在书中指出那些我们经常接触到的C++缺陷。
在本书中,我们的讨论并不试图覆盖整个语言,那些有关语言语义的精确定义可以查看参考手册。我们主要帮助读者构造出可以被那些不是C++语言专家的人所理解的程序。我们不但讨论了那些使程序变得优雅及高效的技巧,也展示了如何使它们更容易被理解和维护的方法。
致谢
本书中的想法和编程惯用法几乎都不是我发明的。我的目的就是把它们(在我8年的C++使用过程中从其他人那学到的并被我认为是最重要的策略和战术)用一种C++新手也能学会的方式展现给读者。这些收获中的部分来自于实际的开发项目中(这些项目被我们从C移植到C++上)的经验,另外一些则来自于和其他高手的讨论。
关于模板以及函数库设计的许多好的想法(包括那些隐藏在本书所给出的容器类后的想法)都来自于最初由Martin Carroll、Andrew Koenig以及Jonathan Shopiro所设计的USL标准组件库中的类。对于在本书中出现的任何错误,则都由我负责。Andrew Koenig是一个C++语言专家,他对我的帮助非常大。另外,那些参与过我所举行过的几期“C++策略与战术”研讨会的人也帮助启发了我书写本书,并对书中的想法进行提炼。其他的重要的想法来自于Tom Cargill、John Carolan、Jim Coplien、Mark Linton、Gerald Schwarz,当然,还有Bjarne Stroustrup,要不是他发明了C++语言,本书也就不可能出现了。
Brian Kernighan阅读过本书的多次草稿,他极好的反馈意见起了很大的帮助作用。同时我还要感谢David Annatone、Steve Buroff、Tom Cargill、Bill Hopkins、Cay Horstman、Lorraine Juhl、Peter Juhl、Stan Lippman、Dennis Mancl、Scott Meyers、Barbara Moo、Lorraine Weisbrot Murray、Bjarne Stroustrup、Clovis Tondo、Steve Vinoski以及Christopher Van Wyk,他们对本书早期的草稿提出了意见。此外,Lorraine Weisbrot Murray对我的鼓励、理解、支持以及爱使得这一切努力都成为了可行的。








点击看大图





加载中...

