C++沉思录
基本信息
- 原书名: Ruminations on C++: A Decade of Programming Insight and Experience
- 原出版社: Addison-Wesley Professional
- 作者: (美)Andrew Koenig Barbara Moo [作译者介绍]
- 译者: 黄晓春
- 丛书名: C和C++经典著作
- 出版社:人民邮电出版社
- ISBN:9787115171788
- 上架时间:2008-2-2
- 出版日期:2008 年2月
- 开本:16开
- 页码:385
- 版次:2-1
- 所属分类:
计算机 > 软件与程序设计 > C++ > C++
合作专区 > 微软技术图书 > 微软程序设计 > 微软C/C++/VC++
编辑推荐
十年编辑生涯的真知灼见.
著名技术伉丽的C++观点...
推荐阅读
内容简介回到顶部↑
本书基于作者在知名技术杂志发表的技术文章、世界各地发表的演讲以及斯坦福大学的课程讲义整理、写作而成,融聚了作者10多年c++程序生涯的真知灼见。
全书分为6篇32章,分别对c++语言的历史和特点、类和继承、stl与泛型编程、库的设计等几大技术话题进行了详细而深入的讨论,细微之处几乎涵盖了c++所有的设计思想和技术细节。全书通过精心挑选的实例,向读者传达先进的程序设计的方法和理念。
本书适合有一定经验的c++程序员阅读学习,可以帮助读者加强提高技术能力,成为c++程序设计的高手。
全书分为6篇32章,分别对c++语言的历史和特点、类和继承、stl与泛型编程、库的设计等几大技术话题进行了详细而深入的讨论,细微之处几乎涵盖了c++所有的设计思想和技术细节。全书通过精心挑选的实例,向读者传达先进的程序设计的方法和理念。
本书适合有一定经验的c++程序员阅读学习,可以帮助读者加强提高技术能力,成为c++程序设计的高手。
作译者回到顶部↑
本书提供作译者介绍
凯尼格,AT&T大规模程序研发部(前贝尔实验室)成员。他从1986年开始从事C语言的研究,1977年加入贝尔实验室。他编写了一些早期的类库,并在1988年组织召开了第一个具有相当规模的c++会议。在ISO/ANSI c++委员会成立的1989年,他就加入了该委员会,并一直担任项目编辑,他已经发表了c++方面的100多篇论文,在Addsion-Wesley出版了C Traps and pitfalls一书(中文版名为《c缺陷与陷阱》,由人民邮电出版社出版),还应邀到世界各地演讲。
.. << 查看详细
.. << 查看详细
目录回到顶部↑
第0章 序幕
第一篇 动机
第1章 为什么我用c++
第2章 为什么用c++工作
第3章 生活在现实世界中
第二篇 类和继承
第4章 类设计者的核查表
第5章 代理类
第6章 句柄:第一部分
第7章 句柄:第二部分
第8章 一个面向对象程序范例
第9章 一个课堂练习的分析(上)
第10章 一个课堂练习的分析(下)
第11章 什么时候不应当使用虚函数
第三篇 模板
第12章 设计容器类
第13章 访问容器中的元素
第14章 迭代器
第15章 序列
第16章 作为接口的模板
第一篇 动机
第1章 为什么我用c++
第2章 为什么用c++工作
第3章 生活在现实世界中
第二篇 类和继承
第4章 类设计者的核查表
第5章 代理类
第6章 句柄:第一部分
第7章 句柄:第二部分
第8章 一个面向对象程序范例
第9章 一个课堂练习的分析(上)
第10章 一个课堂练习的分析(下)
第11章 什么时候不应当使用虚函数
第三篇 模板
第12章 设计容器类
第13章 访问容器中的元素
第14章 迭代器
第15章 序列
第16章 作为接口的模板
前言回到顶部↑
原由
1988年初,大概是我刚刚写完C Traps and Pitfalls(本书中文版《C陷阱与缺陷》由人民邮电出版社出版)的时候,Bjarne Stroustrup跑来告诉我,他刚刚被邀请参加了一个新杂志的编委会,那个杂志叫做《面向对象编程月刊》(Journal ofObject-Oriented Programming,JOOP)。该杂志试图在那些面孔冰冷的学术期刊与满是产品介绍和广告的庸俗杂志之间寻求一个折中。他们在找一个C++专栏作家,问我是否感兴趣。.
那时,C++对于编程界的重要影响才刚刚开始。Usenix其时才刚刚在新墨西哥圣达菲举办了第一届C++交流会。他们预期有50人参加,结果到场的有200人。更多的人希望搭上C++快车,这意味着C++社群急需一个准确而理智的声音,去对抗必然汹涌而至的谣言大潮。需要有个人能够在谣言和实质之间明辨是非,在任何混乱之中保持冷静的头脑。无论如何,我顶了上去。
在写下这些话的时候,我正在构思我为JOOP撰写的第63期专栏。这个专栏每期或者每两期就会刊登。其间,我也有过非常想中断的时候,非常幸运的是,Jonathan Shopiro接替了我。偶尔,我只是写一些当期专栏的介绍,然后到卓越的丹麦计算机科学家Bjorn Stavtrup那里去求助。此外,Livleen Singh曾跟我谈起为季刊C++ Journal撰写稿件的事,那个杂志在发行6期之后停刊了。Stan Lippman也甜言蜜语地哄着我在C++ Report上开了个专栏,当时这本杂志刚刚从一分简陋的通信时刊正式成为成熟的杂志。加上我在C++ Report上发表的29篇专栏文章,我一共发表了98篇文章。
在这么多的杂志刊物里,分布着大量的材料。如果这些文章单独看来是有用的,那么集结起来应该会更有用。所以,Barbara和我(主要是Barbara)重新回顾了所有的专栏,选择出其中最好的,并根据一致性和连续性的原则增补和重写了这些文章。
本书正是世界所需的又一本C++书籍
既然你已经知道了本书的由来,我就再讲讲为什么要读这本书,而不是其他的C++书籍。天知道!C++方面的书籍太多了,为什么要选这一本呢?
第一个原因是,我想你们会喜欢它。大部分C++书籍都没有顾及到这点:它们应该是基于科目教学式的。吸引人最多不过是次要目标。
杂志专栏则不同。我猜想肯定会有一些人站在书店里,手里拿着一本JOOP,扫一眼我Koenig的专栏之后,便立刻决定购买整本杂志。但是要是我自认为这种情况很多的话,就未免太狂妄自大了。绝大多数读者都是在买了书之后读我的专栏的,也就是说他们有绝对的自由来决定是否读我的专栏。所以,我得让我的每期专栏都货真价实。
本书不对那些晦涩生僻的细节进行琐碎烦人的长篇大论。初学者不应该指望只读这本书就能学会C++。具备了一定基础的人,比如已经知道几种编程语言的人,以及已经体会到如何通过阅读代码推断出一门新语言的规则的人,将能够通过本书对C++有所了解。大部分从头开始学的读者先读Bjarne Stroustrup的TheC++ Programming Language(Addison-Wesley 1991)或者Stan Lippman的C++Primer(Addison-Wesley 1991),然后再读这本书,效果可能会更好。
这是一本关于思想和技术的书,不是关于细节的。如果你试图了解怎样用虚基类实现向后翻腾两周半,就请到别处去找吧。这里所能找到的是许多等待你去阅读分析的代码。请试一试这些范例。根据我们的课堂经验,想办法使这些程序运行起来,然后加以改进,能够很好地巩固你的理解。至于那些更愿意从分析代码开始学习的人,我们也从本书中挑选了一些范例,放在ftp.aw.com的目录cseng/authors/koenig/ruminations下,可以匿名登录获取。..
如果你已经对C++有所了解,那么本书不仅能让你过一把瘾,而且能对你有所启示。这也是你应该阅读本书的第二个原因。我的意图并不是教C++本身,而是想告诉你用C++编程时怎样进行思考,以及如何思考问题并用C++表述解决方案。知识可以通过系统学习获取,智慧则不能。
组织
就专栏来说,我尽力使每期文章都独立成章,但我相信,对于结集来说,如果能根据概念进行编排,将更易于阅读,也更有趣味。因此,本书划分为6篇。
第一篇是对主题的扩展介绍,这些主题将遍布本书的其余部分中。本部分中没有太多的代码,但是所展现的有关抽象和务实的基本思想贯穿本书,更重要的是,这些思想渗透了C++设计原则和应用策略。
第二篇着眼于继承和面向对象编程,大多数人都认为这些是C++中最重要的思想。你将知道继承的重要性何在,它能做什么。你还会知道为什么将继承对用户隐藏起来是有益的,以及什么时候要避免继承。
第三篇探索模板技术,我认为这才是C++里最重要的思想。我之所以这样认为,是因为这些模板提供了一种特别的强大的抽象机制。它们不仅可以构造对所包含的对象类型一无所知的容器,还可以建立远远超出类型范畴的泛型抽象。
继承和模板之所以重要的另一个原因是,它们能够扩展C++,而不必等待(或者雇佣)人去开发新的语言和编译器。进行扩展的方法之一就是通过类库。第四篇谈到了库——包括库的设计和使用。
对基础有了很好的理解以后,我们可以学习第五篇中的一些特殊编程技术了。在这部分,你可以知道如何把类紧密地组合在一起,或者把它们尽可能地分离开。
最后,在第六篇,我们将返回头来对本书所涉及到的内容做一个回顾。
1988年初,大概是我刚刚写完C Traps and Pitfalls(本书中文版《C陷阱与缺陷》由人民邮电出版社出版)的时候,Bjarne Stroustrup跑来告诉我,他刚刚被邀请参加了一个新杂志的编委会,那个杂志叫做《面向对象编程月刊》(Journal ofObject-Oriented Programming,JOOP)。该杂志试图在那些面孔冰冷的学术期刊与满是产品介绍和广告的庸俗杂志之间寻求一个折中。他们在找一个C++专栏作家,问我是否感兴趣。.
那时,C++对于编程界的重要影响才刚刚开始。Usenix其时才刚刚在新墨西哥圣达菲举办了第一届C++交流会。他们预期有50人参加,结果到场的有200人。更多的人希望搭上C++快车,这意味着C++社群急需一个准确而理智的声音,去对抗必然汹涌而至的谣言大潮。需要有个人能够在谣言和实质之间明辨是非,在任何混乱之中保持冷静的头脑。无论如何,我顶了上去。
在写下这些话的时候,我正在构思我为JOOP撰写的第63期专栏。这个专栏每期或者每两期就会刊登。其间,我也有过非常想中断的时候,非常幸运的是,Jonathan Shopiro接替了我。偶尔,我只是写一些当期专栏的介绍,然后到卓越的丹麦计算机科学家Bjorn Stavtrup那里去求助。此外,Livleen Singh曾跟我谈起为季刊C++ Journal撰写稿件的事,那个杂志在发行6期之后停刊了。Stan Lippman也甜言蜜语地哄着我在C++ Report上开了个专栏,当时这本杂志刚刚从一分简陋的通信时刊正式成为成熟的杂志。加上我在C++ Report上发表的29篇专栏文章,我一共发表了98篇文章。
在这么多的杂志刊物里,分布着大量的材料。如果这些文章单独看来是有用的,那么集结起来应该会更有用。所以,Barbara和我(主要是Barbara)重新回顾了所有的专栏,选择出其中最好的,并根据一致性和连续性的原则增补和重写了这些文章。
本书正是世界所需的又一本C++书籍
既然你已经知道了本书的由来,我就再讲讲为什么要读这本书,而不是其他的C++书籍。天知道!C++方面的书籍太多了,为什么要选这一本呢?
第一个原因是,我想你们会喜欢它。大部分C++书籍都没有顾及到这点:它们应该是基于科目教学式的。吸引人最多不过是次要目标。
杂志专栏则不同。我猜想肯定会有一些人站在书店里,手里拿着一本JOOP,扫一眼我Koenig的专栏之后,便立刻决定购买整本杂志。但是要是我自认为这种情况很多的话,就未免太狂妄自大了。绝大多数读者都是在买了书之后读我的专栏的,也就是说他们有绝对的自由来决定是否读我的专栏。所以,我得让我的每期专栏都货真价实。
本书不对那些晦涩生僻的细节进行琐碎烦人的长篇大论。初学者不应该指望只读这本书就能学会C++。具备了一定基础的人,比如已经知道几种编程语言的人,以及已经体会到如何通过阅读代码推断出一门新语言的规则的人,将能够通过本书对C++有所了解。大部分从头开始学的读者先读Bjarne Stroustrup的TheC++ Programming Language(Addison-Wesley 1991)或者Stan Lippman的C++Primer(Addison-Wesley 1991),然后再读这本书,效果可能会更好。
这是一本关于思想和技术的书,不是关于细节的。如果你试图了解怎样用虚基类实现向后翻腾两周半,就请到别处去找吧。这里所能找到的是许多等待你去阅读分析的代码。请试一试这些范例。根据我们的课堂经验,想办法使这些程序运行起来,然后加以改进,能够很好地巩固你的理解。至于那些更愿意从分析代码开始学习的人,我们也从本书中挑选了一些范例,放在ftp.aw.com的目录cseng/authors/koenig/ruminations下,可以匿名登录获取。..
如果你已经对C++有所了解,那么本书不仅能让你过一把瘾,而且能对你有所启示。这也是你应该阅读本书的第二个原因。我的意图并不是教C++本身,而是想告诉你用C++编程时怎样进行思考,以及如何思考问题并用C++表述解决方案。知识可以通过系统学习获取,智慧则不能。
组织
就专栏来说,我尽力使每期文章都独立成章,但我相信,对于结集来说,如果能根据概念进行编排,将更易于阅读,也更有趣味。因此,本书划分为6篇。
第一篇是对主题的扩展介绍,这些主题将遍布本书的其余部分中。本部分中没有太多的代码,但是所展现的有关抽象和务实的基本思想贯穿本书,更重要的是,这些思想渗透了C++设计原则和应用策略。
第二篇着眼于继承和面向对象编程,大多数人都认为这些是C++中最重要的思想。你将知道继承的重要性何在,它能做什么。你还会知道为什么将继承对用户隐藏起来是有益的,以及什么时候要避免继承。
第三篇探索模板技术,我认为这才是C++里最重要的思想。我之所以这样认为,是因为这些模板提供了一种特别的强大的抽象机制。它们不仅可以构造对所包含的对象类型一无所知的容器,还可以建立远远超出类型范畴的泛型抽象。
继承和模板之所以重要的另一个原因是,它们能够扩展C++,而不必等待(或者雇佣)人去开发新的语言和编译器。进行扩展的方法之一就是通过类库。第四篇谈到了库——包括库的设计和使用。
对基础有了很好的理解以后,我们可以学习第五篇中的一些特殊编程技术了。在这部分,你可以知道如何把类紧密地组合在一起,或者把它们尽可能地分离开。
最后,在第六篇,我们将返回头来对本书所涉及到的内容做一个回顾。
序言回到顶部↑
这是一本关于C++程序设计的书。说得具体些,它首先是一本关于程序设计的书,其次才是一本关于C++的书。从这个意义上讲,这本书与坊间大部分C++书籍都不一样,那些书所关注的是语言本身,而不是如何运用这种语言。.
识字最多的人一定是最好的作家吗?能演奏最多音符的人一定是最好的音乐家吗?最勤于挥舞画笔的人一定是最好的画家吗?显然不是——这些观点极其荒谬。然而,我们却经常认为,那些了解最多语言特性的人就是最好的程序员。这一看法同样是荒谬的:编程工作中最困难的部分并不是去学习语言细节,而是理解问题的解决之道。
这本书对于语言本身并没有说太多。相反,我们谈了很多关于程序设计技术方面的话题。一个作家必须学习如何讲述故事,同样,一个程序员也必须学习如何分析问题。这本书中包含了大量的问题,以及针对这些问题的解决方案。认真地研习这些内容。将会有助于你成为更出色的程序员。..
这本书中所展示的解决方案有一个共同的思想,那就是抽象——集中注意力,只关注问题中那些在当前背景下最为重要的部分。可以说,如果不以某种方式进行抽象,你就不可能编写任何计算机程序,只此一点已经足以使“抽象”成为程序设计中最重要的单个思想。C++支持好几种不同的抽象形式,其中最著名的有抽象数据类型(Abstract Data Type,ADT)、面向对象程序设计和泛型程序设计。
我们出版这本书的时候,泛型程序设计还没有得到广泛的认知。短短几年后,STL(Standard Template Library,标准模板库)成为了C++标准库的一部分,这一思想也已经非常流行。所有这些使得本书中的思想随着时间的推移而越来越重要。
我们希望您能运用这些思想去理解一堆拼凑的代码与一个抽象之间的差别——这种差别,就好像一堆辞藻与一篇文章、一堆音符与一支歌曲、一纸涂鸦与一幅图画之间的差别一样。...
Andrew Koenig
Barbara Moo
2002年10月于美国新泽西州吉列
识字最多的人一定是最好的作家吗?能演奏最多音符的人一定是最好的音乐家吗?最勤于挥舞画笔的人一定是最好的画家吗?显然不是——这些观点极其荒谬。然而,我们却经常认为,那些了解最多语言特性的人就是最好的程序员。这一看法同样是荒谬的:编程工作中最困难的部分并不是去学习语言细节,而是理解问题的解决之道。
这本书对于语言本身并没有说太多。相反,我们谈了很多关于程序设计技术方面的话题。一个作家必须学习如何讲述故事,同样,一个程序员也必须学习如何分析问题。这本书中包含了大量的问题,以及针对这些问题的解决方案。认真地研习这些内容。将会有助于你成为更出色的程序员。..
这本书中所展示的解决方案有一个共同的思想,那就是抽象——集中注意力,只关注问题中那些在当前背景下最为重要的部分。可以说,如果不以某种方式进行抽象,你就不可能编写任何计算机程序,只此一点已经足以使“抽象”成为程序设计中最重要的单个思想。C++支持好几种不同的抽象形式,其中最著名的有抽象数据类型(Abstract Data Type,ADT)、面向对象程序设计和泛型程序设计。
我们出版这本书的时候,泛型程序设计还没有得到广泛的认知。短短几年后,STL(Standard Template Library,标准模板库)成为了C++标准库的一部分,这一思想也已经非常流行。所有这些使得本书中的思想随着时间的推移而越来越重要。
我们希望您能运用这些思想去理解一堆拼凑的代码与一个抽象之间的差别——这种差别,就好像一堆辞藻与一篇文章、一堆音符与一支歌曲、一纸涂鸦与一幅图画之间的差别一样。...
Andrew Koenig
Barbara Moo
2002年10月于美国新泽西州吉列
书摘回到顶部↑
抽象是有选择的忽略。比如你要驾驶一辆汽车,但你又必须时时关注每样东西是如何运行的:发动机、传动装置、方向盘和车轮之间的连接等;那么你要么永远没法开动这辆车,要么一上路就马上发生事故。与此类似,编程也依赖于一种选择,选择忽略什么和何时忽略。也就是说,编程就是通过建立抽象来忽略那些我们此刻并不重视的因素。C++很有趣,它允许我们进行范围极其宽广的抽象。C++使我们更容易把程序看作抽象的集合,同时也隐藏了那些用户无须关心的抽象工作细节。.
C++之所以有趣的第二个原因是,它设计时考虑了特殊用户群的需求。许多语言被设计用于探索特定的理论原理,还有些是面向特定的应用种类。C++不然,它使程序员可以以一种更抽象的风格来编程,与此同时,又保留了C中那些有用的和已经深入人心的特色。因此,C++保留了不少C的优点,比如偏重执行速度快、可移植性强、与硬件和其他软件系统的接口简单等。
C++是为那些信奉实用主义的用户群准备的。C和C++程序员通常都要处理杂乱而现实的问题;他们需要能够解决这些问题的工具。这种实用主义在某种程度上体现了C++语言及其使用者的灵活性。例如,C++程序员总是为了特定的目的编写不完整的抽象:他们会为了解决特定问题设计一个很小的类,而不在乎这个类是否提供所有用户希望的所有功能。如果这个类够用了,则他们可以对那些不尽如人意的地方视而不见。有的情况下,现在的折衷方案比未来的理想方案好得多。..
但是,实用主义和懒惰是有区别的。虽然很可能把C++程序写得极其难以维护,但是也可以用C++把问题精心划分为分割良好的模块,使模块与模块之间的信息得到良好的隐藏。
本书坚持以两个思想为核心:实用和抽象。在这一篇中我们开始探讨C++如何支持这些思想,后面几篇将探索C++允许我们使用的各种抽象机制。...
C++之所以有趣的第二个原因是,它设计时考虑了特殊用户群的需求。许多语言被设计用于探索特定的理论原理,还有些是面向特定的应用种类。C++不然,它使程序员可以以一种更抽象的风格来编程,与此同时,又保留了C中那些有用的和已经深入人心的特色。因此,C++保留了不少C的优点,比如偏重执行速度快、可移植性强、与硬件和其他软件系统的接口简单等。
C++是为那些信奉实用主义的用户群准备的。C和C++程序员通常都要处理杂乱而现实的问题;他们需要能够解决这些问题的工具。这种实用主义在某种程度上体现了C++语言及其使用者的灵活性。例如,C++程序员总是为了特定的目的编写不完整的抽象:他们会为了解决特定问题设计一个很小的类,而不在乎这个类是否提供所有用户希望的所有功能。如果这个类够用了,则他们可以对那些不尽如人意的地方视而不见。有的情况下,现在的折衷方案比未来的理想方案好得多。..
但是,实用主义和懒惰是有区别的。虽然很可能把C++程序写得极其难以维护,但是也可以用C++把问题精心划分为分割良好的模块,使模块与模块之间的信息得到良好的隐藏。
本书坚持以两个思想为核心:实用和抽象。在这一篇中我们开始探讨C++如何支持这些思想,后面几篇将探索C++允许我们使用的各种抽象机制。...
【插图】
相关资源回到顶部↑
· 精彩书评..
· 【推荐】众多高校学子口口相传,他们共同的选择--华清远见嵌入式学院(嵌入式Linux就业课程、3G手机开发就业课程,通过入学测试即签100%就业协议,4个月集中实训,世界500强企业成功就业保障!!!)· 【亚嵌教育 嵌入式培训专家】(嵌入式培训,嵌入式Linux培训,ARM培训,Linux培训,3G培训,Android培训,WINCE培训,DSP培训,FPGA培训,嵌入式就业培训)
· 程序员的7种武器(正则表达式、编程语言、数据库、算法、软件调试、开发环境)
· C/C++ 经典著作(《C专家编程》《C++ Templates中文版》《C和指针 》《C陷阱与缺陷》《C++沉思录》)








点击看大图







加载中...

