查看完整版本: 郑重给大家推荐一本C++程序设计教程

业余C/C++ 2008-8-30 15:23

郑重给大家推荐一本C++程序设计教程

[size=3][font=宋体]    至我学习[/font][font=Times New Roman]C++[/font][font=宋体]编程以来,看过不少国内的书,但市面上多数教程不是偏重讲授[/font][font=Times New Roman]C++[/font][font=宋体]基础,就是偏重讲解编程工具的运用。即使有以实例为主的教程,也只是偏重步骤,而忽视分析和思想。在大四快结束的时候,我偶然在网上查阅国外教程时买到这本[/font][font=Times New Roman]C++[/font][font=宋体]教程,觉得它很不错。今天,我就将这本教程推荐给大家——《[/font][font=Times New Roman]C++[/font][font=宋体]程序设计语言(特别版)》,英文原名《[/font][font=Times New Roman]The C++ Programming Language (Special Edition)[/font][font=宋体]》,主编:[/font][font=Times New Roman]Bjarne Stroustrup[/font][font=宋体],机械工业出版社出版。可能,在论坛的资源里已经收录了这本书,不过没有详细的介绍,这里我再次郑重推荐,并本书作者的书序摘录如下(序中红色部分是本人的看法、理解和解释,只供参考):[/font]
[font=Times New Roman][/font]
[font=Times New Roman]                                                                     [/font][font=宋体]中文版序[color=red](译文)[/color][/font]


[font=Times New Roman]       [/font][font=宋体]本书是讲述标准[/font][font=Times New Roman]C++[/font][font=宋体]的[b]最完整[/b]和[b]最新的[/b]著作,它拥有最多的读者,使用也最为广泛。按我目前的统计,本书已经被翻译成[/font][font=Times New Roman]17[/font][font=宋体]种语言(参见[/font][/size][url=http://www.research.att.com/~bs/covers.html][font=Times New Roman][size=3][color=#0000ff]http://www.research.att.com/~bs/covers.html[/color][/size][/font][/url][size=3][font=宋体])。所以,这个译文所依据的原文,已经从成千上万的读者建议中获益匪浅。[/font]
[font=Times New Roman]       [/font][font=宋体]现在,中国的程序员和莘莘学子能够更容易地读到本书,对此我感到欣慰。我的中国同事,还有许许多多中国的程序员(通过电子邮件)早就向我建议有必要将本书译为中文。因为自己的母语也不是英语,我当然也认识到了这种必要性——何况,我还非常喜欢拿本书译本的总数作为[/font][font=Times New Roman]C++[/font][font=宋体]得到广泛应用的活生生的例子[color=red](这种幽默,在国内教程上是见不到的)。[/color][/font][color=red][/color]
[font=宋体]   自然了,所谓“仁者乐山,智者乐水”,有人会更喜欢英文原版,而另外一些人则会觉得阅读翻译成母语的版本更能消除理解上的障碍。我认识许多程序员同时使用原版和译本,这样既能发挥母语的优势,又能用英语与全世界的程序员进行交流。[/font]
[font=宋体]   本书涵盖了标准[/font][font=Times New Roman]C++[/font][font=宋体]、它的标准库和[/font][font=Times New Roman]C++[/font][font=宋体]所支持的基本技术,如面向对象程序设计和通用型程序设计。其目的不仅仅是阐述语言的功能,还要提供如何行之有效地使用这些功能的信息,使程序员足以应付大多数开发项目。因此其中[b]对设计的讨论[/b][color=red]①[/color]非常重要。[/font]
[font=Times New Roman]       1998[/font][font=宋体]年,[/font][font=Times New Roman]ISO[/font][font=宋体]的[/font][font=Times New Roman]C++[/font][font=宋体]标准([/font][font=Times New Roman]ISO/IEC 14882 [i]Standard for the C++ Programming Language[/i][/font][font=宋体])得到了批准(各国标准委员会以[/font][font=Times New Roman]22[/font][font=宋体]-[/font][font=Times New Roman]0[/font][font=宋体]全票通过)。这是[/font][font=Times New Roman]C++[/font][font=宋体]发展史上的一个里程碑,开创了[/font][font=Times New Roman]C++[/font][font=宋体]工具和技术稳定发展的新纪元。[/font]
[font=宋体]对我本人而言,其中关键在于,标准[/font][font=Times New Roman]C++[/font][font=宋体]相对于以前的任何版本,更接近于我对[/font][font=Times New Roman]C++[/font][font=宋体]的目标。标准[/font][font=Times New Roman]C++[/font][font=宋体]及其标准库使我能够编写出比过去更好、更优雅、更高效的[/font][font=Times New Roman]C++[/font][font=宋体]程序。[/font]
[font=宋体]   标准化的目的是为语言和库制定一个规范,使其能够更好地服务于所有用户群体,而不至偏向于某个用户群、某个公司或某个国家。这是一个以保证质量和达成共识为目的的开放公正的过程。[/font]
[font=宋体]   开放和民主的标准化过程存在一个潜在的问题:所谓“由委员会设计”。这在[/font][font=Times New Roman]C++[/font][font=宋体]的标准化中基本上被避免了。原因之一在于,我担任了语言扩展工作组的主席。在此位置上,我负责评估所有关于主要语言扩展方面的建议,并就那些我本人、工作组和委员会都认为值得和可行的建议撰写最终版本。因此,这一委员会的主要活动是讨论提交上来相对完整的设计,而不是自己来设计。于此类似,标准库的主要新增部分——“[/font][font=Times New Roman]STL[/font][font=宋体]”(为容器、迭代器和算法提供了通用的、高效的、类型安全的和可扩展的框架),主要都来源于一个人——[/font][font=Times New Roman]Alexander Stepanov[/font][font=宋体]的工作成果。[/font]
[font=宋体]   重要的是,[/font][font=Times New Roman]C++[/font][font=宋体]标准不仅仅是一份文档。它已经在各种[/font][font=Times New Roman]C++[/font][font=宋体]实现产品中得到了体现。所有主要的[/font][font=Times New Roman]C++[/font][font=宋体]实现产品现在都实现了标准[color=red](化)[/color],只有极少的几个例外。为了帮助厂商更好的实现标准,现在至少有两个公司提供了标准[/font][font=Times New Roman]C++[/font][font=宋体]验证套件。因此,只要合适,我现在写代码,都会用到标准[/font][font=Times New Roman]C++[/font][font=宋体]提供的和本书这一版中讲述的功能。[/font]
[font=Times New Roman]        C++[/font][font=宋体]语言的改进和标准库的增强,使我自己编写代码的方式发生了显著变化。现在我的程序比原来更加简洁、更加高效。这直接得益于标准[/font][font=Times New Roman]C++[/font][font=宋体]对抽象更好、更系统和更清晰的支持。对模板和异常等功能更好的支持,使对底层处理和更混乱的功能的需要大大降低了。而且,最近几年出现了许多新的设计和编程技术,这些在本书的表达方法和实例中都有所反应。[/font]
[font=Times New Roman]        C++[/font][font=宋体]现在可以[b]作为高级语言[/b]来讲授了[color=red](不再是一种[/color][/font][color=red][font=Times New Roman]C[/font][/color][color=red][font=宋体]的拓展和衍生,也不再是一种杂乱的程序设计语言了,所以大家不要再以老旧的观点看待标准[/font][/color][color=red][font=Times New Roman]C++[/font][/color][color=red][font=宋体])[/font][/color][font=宋体]。[color=black]也就是说,重点一开始就可以放在算法和容器上,而不用再在什么[b]位[/b]呀,[b]联合[/b]呀,[/color][/font][b][color=black][font=Times New Roman]C[/font][/color][/b][b][color=black][font=宋体]风格字符串[/font][/color][/b][color=black][font=宋体],[b]数组[/b]等等东西上纠缠不清了。自然,底层的概念(如数组、重要的指针应用和强制转换)最终还是要教学的。[u]但是,可以等到作为新手的[/u][/font][/color][u][color=black][font=Times New Roman]C++[/font][/color][color=black][font=宋体]程序员、读者或学生已经成熟,能够在用这些功能实现的高级概念的大背景中看待它们的时候[/font][/color][color=red][font=宋体](我出题的目的)[/font][/color][color=black][font=宋体],[/font][/color][/u][font=宋体][u]再对这些功能进行阐释[/u][color=red](估计这种教学方法,我们国内的教师们没有多少可以做到)[/color]。[/font]
[font=宋体]   我想特别强调(怎么强调都不过分)的是,应该多使用静态类型安全的字符串和容器[color=red](这部分内容我还没能掌握,希望高手们赐教)[/color],而不要学那些使用大量的[b]宏[/b]、[b]强制转换[/b]和[b]数组[/b]的编程风格。在本书中,我能够根本不用宏,并且只在很少的非用不可的情况下才使用强制转换。我认为[/font][font=Times New Roman]C/C++[/font][font=宋体]形式的宏是一种严重的缺陷[color=red](很严厉的措词)[/color]——现在因为有了[b]模板[/b]、[b]名字空间[/b]、[b]在线函数[/b][color=red](译文可能有点问题,这里英文是指:[/color][/font][color=red][font=Times New Roman]inline functions[/font][/color][color=red][font=宋体],书前面有英文版的序,可以对照)[/font][/color][font=宋体]和常量这些正确的语言功能,它很大程度上更是一种多余了[color=red](被当成垃圾了,这么说不过分吧)[/color]。同样,在任何语言中,强制转换的大量使用都是不良的设计标志[color=red](可好像更容易被接受[/color][/font][color=red][font=Times New Roman]…[/font][/color][color=red][font=宋体])[/font][/color][font=宋体]。宏和强制转换是错误的主要[u]渊薮[/u][color=red](英文版中译为[/color][/font][color=red][font=Times New Roman]sources[/font][/color][color=red][font=宋体],我想可以理解为源头吧)[/font][/color][font=宋体]。不用它们也能工作,这一点大大提高了[/font][font=Times New Roman]C++[/font][font=宋体]编程的安全性和优雅性。[/font]
[font=宋体]    标准[/font][font=Times New Roman]C++[/font][font=宋体]改变了我们使用[/font][font=Times New Roman]C++[/font][font=宋体]编程、设计程序以及教授[/font][font=Times New Roman]C++[/font][font=宋体]编程的方式。这些变化不可能“毕其功于一役”[color=red](老教授就爱整些古文,忍了吧)[/color]。我鼓励你在标准[/font][font=Times New Roman]C++[/font][font=宋体]、在本书中所用的设计和编程技术,以及自己的编程方式上好好下一番功夫[color=red]([/color][/font][color=red][font=Times New Roman]C++[/font][/color][color=red][font=宋体]之父对我们的要求)[/font][/color][font=宋体]。我想脱胎换骨是有可能的。但是别太死心眼了[color=red](这两句不说了,直接来英文翻译原句吧:[/color][/font][font=Times New Roman][color=red]I suggest that major improvements are possible.Do keep a cool head,though.[/color][/font][font=宋体][color=red])。[/color]奇迹是不存在的,在产品代码中使用仅仅一知半解的语言功能和技术是相当危险的。现在该开始探索,开始试验了[color=red]([/color][/font][color=red][font=Times New Roman]Now is the time to explore and experiment[/font][/color][color=red][font=宋体])[/font][/color][font=宋体]——标准[/font][font=Times New Roman]C++[/font][font=宋体]真正对你有所裨益的地方,就在理解新概念和新技术的旅途中![/font]
[font=Times New Roman][/font]
[font=宋体]    路途愉快![/font]
[font=Times New Roman][/font]
[/size][font=Times New Roman]
[size=3]                                                                                                                                               Bjarne Stroustrup[/size][/font]
[font=Times New Roman][size=3][/size][/font]
[size=3][font=Times New Roman]                    [/font]
[font=Times New Roman][/font]                                                        (序到此完毕)
[font=Times New Roman][/font]
[font=宋体]   最后值得一提的是,这个翻译本于[/font][font=Times New Roman]2002[/font][font=宋体]年[/font][font=Times New Roman]7[/font][font=宋体]月就已经出版了的。如果你买到此书,建议你放下其它的C++教程,包括你的课本,认真的学习下(尤其是STL和后面的讲设计的部分)![/font]


[font=Times New Roman]      [/font][font=宋体]此外,我会陆续摘录上文①处谈到的程序设计技术(书上“第四部分 用C++做设计”),但由于篇幅太大,只能是摘录其中的一部分,摘录内容目录如下:[/font][/size]
[size=3][font=宋体]   [/font][/size]
[size=3][font=宋体]   用C++做设计之一:[url=http://www.stubc.com/thread-2350-1-1.html]http://www.stubc.com/thread-2350-1-1.html[/url][/font][/size]
[size=3][font=宋体]        内容包括:[/font][/size]
[size=3][font=宋体]        23.4.3 设计步骤  与  23.4.3.1 步骤一:发现类[/font]

[font=宋体]   用C++做设计之二:[/font][/size][url=http://www.stubc.com/thread-2364-1-1.html][font=宋体][size=3]http://www.stubc.com/thread-2364-1-1.html[/size][/font][/url]
[font=宋体][size=3]        内容包括:[/size][/font]
[size=3][font=宋体]        23.4.3.2 步骤2:描述操作、23.4.3.3 步骤3:描述依赖性、23.4.3.4 步骤4:描述界面  与  CRC卡片
[/font]
[/size]

[[i] 本帖最后由 业余C/C++ 于 2008-9-3 19:44 编辑 [/i]]

业余C/C++ 2008-9-7 17:29

[size=3][/size]
[size=3][/size]
[size=3][b]     务必请大家认真的看下这个序言!!![/b][/size]

jason 2008-9-8 18:55

c++之父的书,学习c++必看啊
另外推荐两本 C++ Primer   Big C++
看过感觉非常好

困C之斗 2008-9-11 12:44

此书不知初学者可以看懂吗
我只学了C
页: [1]
查看完整版本: 郑重给大家推荐一本C++程序设计教程