c 语言书籍推荐计算机Word文档下载推荐.docx
《c 语言书籍推荐计算机Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《c 语言书籍推荐计算机Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。
上面的书未必都需要读一遍,但无论如何,TC++PL是应该阅读的。
(二)进阶A:
这个路线侧重于语言本身
《EffectiveC++》
第二版(第三版国外已上架,国内一些网上书店也在预订中)
简称EC。
C++程序员必读!
很多时候,我们说C++圣经不是指TC++PL,而是这一本。
《ThePragmaticProgrammer》一书中写到:
“一旦你发现自己要参与C++项目的开发,赶快跑(不要走)到书店去购买ScottMayer的《EffectiveC++》,可能还要《MoreEffectiveC++》”。
《C++CodingStandards:
101Rules,Guidelines,andBestPractices》/《C++编程规范》
个人认为此书应为C++程序员必备的案头书。
几乎Effective系列和Exceptional系列都在这里得到了总结。
最新的模版、异常的业界经验都在这里的到了体现。
可能的唯一缺陷就是对一个新手而言,关于“为什么这么做”的问题,解释的不够。
我的看法是:
如果你不理解其中的条款,记忆,并且照做;
如果你理解其中的条款,我猜你一定会同意书中的观点。
我认为这本书中的内容至少在2009年以前都不会过时,人们将广为传诵它制定的101条戒律。
还不知道他的简称,也许“101”会成为一个候选者?
提到《EffectiveC++》,那么另外三本书一一浮出水面:
《MoreEffectiveC++》
《ExceptionalC++》
《MoreExceptionalC++》。
新书《ExceptionalC++Style》也是值得一看的好书。
上述几本书,一本也不应该放过。
个人建议上述书籍按顺序阅读。
并且,在将来反复阅读这几本书。
(三)进阶B:
这个路线侧重于程序库。
《TheC++StandardLibrary》/《C++标准程序库—自修教程与参考手册》
听说过STL吗?
这本书会教你最基本的,也是最重要的STL的使用。
这本书,应该是必读的。
《EffectiveSTL》
会使用STL还不够,还必须知道什么时候选择什么STL组件,这是STL使用的必读书。
《GenericProgrammingandtheSTL:
UsingandExtendingtheC++StandardTemplateLibrary》/《泛型编程与STL》。
这本书理论性较强,但是真的很严谨,而且并不是非常难懂。
理解其中对于Concept的解释,将是非常重要的。
《C++STL》
这不是讲述使用程序库的,而是讲述程序库实现原理的。
肠胃不好的,需要慢慢吸收。
这个路线的书,仍然是建议按顺序阅读。
进阶A、进阶B两个路线应该是可以并行的。
其他进阶参考书
提出这些参考书,只是避免争议,也为开阔视野,笔者并不曾完全读过所有的。
《ThinkinginC++》/《C++编程思想》
这本书及其中文版传言好坏都有,没有认真看过,不做评价,如果确有兴趣,不妨尝试一下该书。
以下几本书基本上涉及的都是语言本身,大体上可以按照以下的顺序阅读。
《C++必知必会》
如果早一年,这本书将是重量级的,然而它被101和《ExceptionalC++Style》盖过一头。
《C++Gotchas:
AvoidingCommonProblemsinCodingandDesign》/《C++程序设计陷阱》
这又是一本我未曾读过,而且广受好评的书。
《STL源码剖析》
这本书我刚到手,就被人"
借"
走,以至于到现在也没有看过。
看过这本书的朋友,可以给一个合适的评价。
高级:
《TheDesignandEvolutionofC++》/《C++语方的设计和演化》
简称D&
E,内容并不艰深,Bjarne的书,仅此,就值得一读。
前段时间,互动网曾8块一本(人民币)贱卖此书,现在好像没了。
《InsideTheC++ObjectModel》/《深度探索C++对象模型》
C程序员读后一定会觉得C++原来并不神秘。
《C++Template》
在阅读STL、Boost或者Loki的源代码之前,请仔细阅读本书,它可以减轻一些阅读的烦恼。
这本书是讨论C++模版的权威。
《ModernC++DesignGenericProgrammingandDesignPatternsApplied》/《C++设计新思维——泛型编程与设计模式之应用》
简称MCD。
在阅读MCD之前,建议先阅读一下《C++Template》。
《对象揭秘:
Java、Eiffel和C++》
你对C++不满吗?
这本书可以部分地帮你完成抱怨的目标。
也许它还可以让你不迷信C++。
最后,一份C++标准文档也是应该加以咀嚼的。
还有一些书籍,并不能简单的归于C++,也难以在纯粹的书本学习中加以掌握。
《DesignPatterns》/《设计模式》一书就归于此类。
所有上述的书籍,要么谈论C++语言本身,要么谈论STL的,要么兼而有之(当然严格讲STL也是C++语言非常重要的一部分)。
偶尔,某些书中条目也会涉及实际工程。
这些书并不是C++软件开发的全部,但是他们很重要。
阅读这些书,未必需要化费太多的精力,有时候是会困难,但也有时候会很快速。
最后,编程语言并非计算机科学技术的全部,尤其对于在校的学生来说,打好基础、开阔视野都是非常重要的。
至少我是这么认为的。
国内引进第一批C++经典书籍的时候我是亲历的。
感觉真是“忽如一夜春风来,千树万树梨花开”。
别误会,我说的这个第一批并非《C++ProgrammingLanguage》《C++Primer》这种经典中的经典。
而是说诸如《ExceptionalC++》《MoreExceptionalC++》《Effective&
MoreEffectiveC++》《C++Gotchas》《GenericProgrammingandtheSTL》《TheC++StandardLibrary》《C++Templates》《MordenC++Design》等。
其中《ModernC++Design》是最为激动人心的著作。
学泛型而不读该著作就好像学算法不读D.E的《TheArtofComputeProgrammingvol.1.2.3》一样,无法达到更高的境界。
我只记得当时拿到这本书从早晨9点一直看到晚上22点,两顿饭都没有吃,如痴如醉。
正因为这本书太经典,也太前卫了,所以我看完心里就暗暗的下了个结论“C++图书界将很久不会出现这样激动人心的著作了”。
果然,后来出的一些如《AccelerateC++》《AppliedC++》《C++NetworkProgrammingvol.1.2》等,虽然也堪入经典之列,但是毕竟没有令人十分振奋的内容了。
然而,C++泛型技术的发展却一刻也没有停止过,boost库的不断更新将C++泛型技术逐渐推动到了一个新的高峰,原先在《ModernC++Design》中的有些前卫有些学院派的技术到了boost库中终于和实践紧密结合到了一起,泛型的抽象本质发挥了其惊人的力量,于是boost库里出现了一个又一个具有高度可复用性和定制性的泛型构件。
泛型通过boost库终于渐渐贴近了程序员的生活。
如果说C++泛型是那只压在五行山下的孙猴子,那么《ModernC++Design》就揭开了山上的封印,释放了这猴头惊人的力量,而boost库则是孙悟空头上的那道金箍,约束并引导着它向正确的方向走,做正确的事。
虽然有这道金箍,但它的力量却一点也没有削弱,甚至更强,只不过在被磨掉棱角的同时日趋成熟了而已。
然而,遗憾的是,虽然boost库中随处可见精致的泛型应用,可以说是一本源码教科书,正如Linux源代码之与程序员,但是“没有三两三,别想过梁山”,并非每个人都能够读懂其源代码,甚至一个对泛型颇为了解的程序员也会在其中迷途难返。
这是因为boost库为了在大部分主流编译器上都能通过编译,做了很多的workaround,并且,为了节省代码量,boost库中随处可见大片大片的宏,这些宏就像迷宫,源代码的迷宫。
这两个原因都使得boost的源代码可读性较差。
因此,boost库虽然贴近了程序员,boost库的源代码却愈发远离了程序员。
但是,在C++泛型领域已经登堂入室,欲更进一步,一窥堂奥者却非得阅读像boost这样经典的源代码不可。
“熟读唐诗三百首,不会吟诗也会吟”。
虽然boost库的源代码的可读性较差,但也并非极差,如果有人事先为你透彻讲解boost库中的泛型运用和设计理念,相信你一定会在阅读时游刃有余。
这就是了——一本即将出版的经典之作,由boost的发起者之一,C++标准委员会的成员DavidAbraham以及另一位boost成员AlekseyGurtovoy合著的——《C++TemplateMetaprogramming:
Concepts,Tools,andTechniquesfromBoostandBeyond》。
对于这么一本势必成为经典的书,我实在惶于评价,还是引用其主页上面的一段话吧:
这本讲述C++模板元编程的书将赋予C++用户空前的强大能力,并使这门技术成为程序员手中真正实用的一门技术。
ThisbookcoversC++TemplateMetaprogramminginawaythatprovidesunprecedentedcapabilitytotheC++power-user,anddeliverspracticalmetaprogrammingintothehandsoftheeverydayprogrammer.
一直以来,C++泛型似乎总处于一种奇怪的位置,有人说它太学院派,有人认为那太遥远,现在还用不到它,有人认为那是库的设计者的事情,与程序员关系不大。
更有人持“不敢高攀”的态度。
其实这些都是错误的态度,泛型是一门由来已久的思想,其核心理念是抽象,并没有什么神秘之处。
与面向对象提供的二进制复用相比,泛型的代码提供了源码级的复用,一个具有更强的动态特性,一个具有更强的类型安全性和效率,两者互补才能发挥最大的力量。
已经出版的很多关于C++泛型的经典书籍其实已经很好的介绍了这一点。
只不过,关于C++泛型,还有一门可以独立出来的技术——模板元编程。
而这恰恰是令泛型构件更具表达力和自由度的技术。
甚至也可以说是boost库的基石之一(除了部分对泛型依赖不强的组件如Regex等例外)。
所以,显而易见这是一门非常重要的技术,这一点从《GenerativeProgramming》一书中也可看出。
然而,对于这门可以独立出来的技术,目前我们所看到的只是一些零星的描述,《C++Templates》里面虽有一整章描述metaprogram,但对于渴求知识者仍如隔靴搔痒,不能尽兴。
不过,这种情况就快过去了,《C++TemplateMetaprogramming》将会系统的讲述C++模板元编程技术,将这门原先只是大师们手中的利器的神秘技术带到普通程序员的手中,赋予普通程序员惊人的力量。
如果说《ModernC++Design》是C++泛型书籍上的经典之作(它的确是),那么这本即将道来的《C++TemplateMetaprogramming》将是经典之后的又一次经典!
分享
C++的学习方法及书籍推荐
来源:
张红的日志
工作半年了,一直觉得自己C++基础太差了,直到现在这种感觉强烈到让我在网上搜能提升的宝典,从现在起,要有计划的提升编程能力了。
贴一篇说的不错的文章。
从《C++Primer》,《C++标准程序库》开始打基础了。
-------zhangh2011-01-19
(一)我现在理解的C++
种种原因,很多精力要投入到java的学习和使用中去了,想形成一个学习C++的系列文章,没有什么风格,也没有什么时间表,想到哪就去写。
这里把以前自己另外一个ID发表的一篇文章的一部分作为这个系列的第一篇,算是开头吧。
学习C++重在理解其各种语言设施所代表的语义,以及C++所能表示的语义所代表的设计思想。
首先从宏观上入手,你需要明白的是C++是程序设计语言的本质。
在此我把C++最重要的性质写下来:
C++是一门静态类型检查,基于C内存模式,支持四种基本程序设计范型的语言。
注意,这里说明了三个本质特性,静态说明了语言的类型检查性质,基于C内存模式告诉我们在C++中所有与内存有关的操作都需要程序员自己来负责,这样就带来了很多设计程序时的需要注意的地方,而理解支持的四种基本范型却是理解各种语言设施的基础。
然后记住C++的最大的一点设计哲学,也是其贯穿应用C++的一条本质,我引用《C++PRIMER》中文版前言内的一句话表示--“C++的基础是各种设施,它们让用户能够通过定义新的数据类型来扩展语言本身,这些新类型可以与内置类型一样的使用方式(如何理解这句话是关键,我的理解是:
用户定义类型可以在任何使用内置类型的时候做为其替代,再具体点说就是用户定义类型可以象内置类型那样可以被声明,其对象可以被初始化,可以相互复制,可以象内置类型对象那样和很多操作符一起使用,可以被作为参数传递给函数,可以作为函数的返回值,可以作为容器的操作对象,用户定义类型可以和内置类型一样作为模板的参数),掌握这些设施(哪些设施?
就是让用户定义类型可以和内置类型一样方便使用的设施,包括什么?
构造,拷贝,解构函数,操作副重载.....)的第一步就是理解基本语言(什么是基本语言?
就是C++中betterc部分)。
在此,我还想提出一点十分重要的概念:
一门语言的最本质的东西就是其类型系统,任何语言都有自己的独特的类型系统,学习C++就是学习他的类型系统。
所以首先需要彻底明白什么是数据类型这个概念。
这样你的思路就清楚了,你有选择,从每一种C++支持的设计范型入手学习。
结构化设计-----也就是C++中的betterc部分,你需要在C的基础上学会函数重载和引用这两个最重要的语言新特心性。
基于对象----你需要建立C++最强大的概念--类,也就是用户定义类型,这其实就是数据结构里面接触的抽象数据类型的概念,以及合理构造使用类的一系列语言措施。
并始终记住,在C++进行设计时用类来表示我们需要表示的概念。
类也是C++抽象机制里面最核心的概念。
(二)书的诱惑
《C++程序设计语言》:
如果你只买一本C++书,这本就是你的选择,作者Bjarne就是让你做出这样选择的全部理由,没有人能比他更了解什么样才是真正的使用C++编程了,有人说到这本书语言晦涩,或者对与初学者此书不适合,对此评论我颇不以为然,我看的是中文版,起码在我看来语言描叙非常到位,我喜欢这样的技术描叙风格。
全书的核心就是告诉你如何去用正确的观念编写正确的C++的代码。
强烈推荐。
《C++语言设计与演化》:
这本书也是我同时拥有中英两版的两本书之一(另外一本是《设计模式》)。
如果在得到上面的那本书之后你需要第二本,那么在我看来这就是你的选择,作者同样是Bjarne,他将在这本书中告诉你C++的起源与发展,语言原则与本质,各种特性加入的理由和考量,以及几乎一切关于C++有趣的故事。
我阅读过中英两版,都是强烈推荐。
《C++标准程序库》:
在AMAZON上面关于C++书籍评论最为火暴的一本。
全书对于标准程序库的介绍可谓深入浅出,而且全书都是从实际运用出发,书中例子简单却非常说明问题,加上一些图表的陈列,使其概念十分清晰,而且从手册和学习两方面看都有其存在价值。
《EFFECTIVEC++中文版》:
无须多说,在任何C++书籍推荐目录中都可以找到这本书的身影,盛名之下必无虚士。
主要强调的是运用C++的各种特性的时候所必须注意的地方,以及一些比较通用的设计手段。
其短小精悍的语言自然非常适合快节奏的现代风格,个人就十分喜欢Meyer的写作方式。
《MOREEFFECTIVEC++中文版》:
做为上本书的姐妹篇,一样的写作风格,一样的写作目的。
只是个人认为和其姐姐相比,存在差距,主要是信息量没有《EFFECTIVEC++中文版》那么大,主要说到了一些C++的设计惯用手法。
推荐。
《C++PRIMER中文版》:
同样是出自大师之手,作者LIPPMAN,作为早期C++编译器的实现者之一,对与C++的了解以及该如何论序都有自己的独到见解。
做为C++的百科全书和《C++程序设计语言》有着一样的地位。
但是前者更强调的是C++的语法和其语义,而后者则是以如何用C++进行合理设计做为描叙的中心。
全书构思十分巧妙,书的一开始就直接进入C++的主题,前面五章都用类设计一个数据结构,让读者完全明白了各种用户定义类型所代表的抽象能力,然后直接进入第六章标准库中的容器类,这样的设计让读者十分清楚的建立容器和类这两个C++中十分重要的概念。
这样的设计针对有一定基础的C++读者来说可以说是非常有效果的。
但是对于初学者来说,这确实不是一本合适的书籍,因为一上来太多的名词会把刚刚接触C++的人吓着的。
《C++沉思录》:
非常有特点的一本书,全书假设读者已经通晓C++语言,重点告诉读者C++的概念以及一些C++的设计手段,比如用C++到底为什么会比C或者其他过程语言更好?
(书中给出的答案是,因为只有对象才有能力保持一定的状态,而算法没有这样的能力),如何进行抽象数据类型的程序设计,如何理解多态,如何通过代理隐藏继承,如何进行引用技数,为了效率如何进行缓时拷贝,以及模板技术是如何发展演进最后构成成STL库的。
阅读感觉和《C++程序设计语言》一样,思想性非常强,读这样的书很累,脑子必须一直思考问题,思考作者里面提出的问题和他提出的解决方式。
这本书最大的特点是非常直接的把C++语言的核心暴露出来-----三种抽象模型和极其语言设施本身对这三种抽象模型的支持。
而《C++沉思录》给我的更深层思考是什么才是运用C++最合理的方式。
《C++STL中文版》:
很朴实,不花俏,但是价值很高。
个人认为其主要价值体现在以下几个方面:
1,对于STL的实现关键iterator一般都使用了两种方式描叙,一种比较老式的函数方法,一种是新的?
traits技巧,这样读者可以非常清楚的知道技术的演进。
2,提供了一个STLLITE版本,阅读这样的代码对自己的提高非常大。
3,书中提供的测试模块对于读者来说也是非常有的一章,对于想扩展STL的,可以按照上面提供的方法测试自己的STL组件。
缺点:
装订比较粗糙,与大师之作的地位不相称。
推荐
《C++PRIMERPLUS中文版》:
一本思想性不是很强,技巧性不是很强的书,但是对于初学者来说非常合适的书。
其中许多论序方式都和具体化,总体来说,这本书是我看过的C++书籍里面最合适初学者的。
《深度探索C++对象模型》:
这也是一本比较特别的书,告诉你编译器是如何安排处理对象的内存空间的,以及一些OO特性是如何实现的。
不认为这是一本C++必须读物,算是课后读物应该比较合适吧,因为有时间了解C++的OO实现还不如花点时间搞清楚OO理论的本质概念:
typetheory。
《C++设计新思维——泛型编程与设计模式之应用》:
可谓C++中的奇书。
这样的一本书,很难让人做出正确的评价与推荐指数(尤其是以我这个实用和人生本就应该享乐为人生观的人来说~:
),因为全书所代表的思想前卫到了有点不切实际的地步,模式+泛型—多么高雅的组合。
我个人的观点是,只有一部分人需要阅读此书,他们就是所谓的realc++fans,暂且不提C++本身是否遇到了困难,就其书中所代表的设计思想,对于C++没有一点感情的程序员(感情就是以爱好为基础,而不是以攒钱为前提),我想对于这样的设计技术总会有晕的感觉,而一般程序员多半都不会喜欢这样的感觉~:
)。
《对象揭秘:
Java、Eiffel和C++》:
从书名就可以看出这本书不仅仅和C++有关系。
可以说全书就是对C++的一次批判吧(书也起源与作者的一篇批判C++的文章)。
有时候听听另外一种声音对自己保持清醒的头脑是非常有帮助的,对待一个人,对待一本书以及对待一门程序设计语言都是如此。
这本书好象不是很火,大概跟其宣传不是很到位,或者同能同时了解这三门语言并比较关心这些语言深层次的优略的读者比较少有关系吧,在我看来这本书包含了许多对象与类型方面的理论,最为出彩的就是作者抓住Bjarne的“在C++中一个类就是一个类型”这样的“错误”言论狠批的论证过程。
看这本书另外一个好处是能教会大家该如何去合理的辩驳自己的对手~:
《大规模C++程序设计》:
书在手上很久了,可一直没有仔细看,这也是评论之前必须说明的。
总体看来书中涉及的很多东西都鲜见于其他读本。
不管AMAZON上的评论是否是这本书比较过时,起码它介绍的许多对与我来说都是我所不知道不了解的,别人说过时是他的事情。
而我,还是推荐。
《STL和泛型编程》:
难得的一本关于泛型编程的理念书籍,同样也是作为手册和学习两用,但是其手册不是使用手册,而是概念手册,对于设计自己的STL组件,这本书有非常好的帮助,虽然网上有篇STL的文档,其中的70%内容和这本书雷同,但此书仍不失可读性。
《C++编程思想第二版》:
非常一般的书,是的这就是我对这本很多人奉为名著的评论,至于为什么是这样的评论,或者你不相信我说的是客观话,在你买了之后看完就知道了。
一般。
《EssentialC++中文版》:
总感觉这本书定位不是很清楚,因为对于初学者来说其开始就涉及了太多的名词,初学者看这本书,几乎就不要指望能很好的入门。
而对于进阶者来说,其内容并无新意,对于C++高手来说,这样的小读本,根本就没有阅读的必要,也许是LIPPMAN+JJHOU的盛名吧,但我觉得这次算是有虚