2.6 与Qt及C++(www.cppentry.com)相关的文献资源
1.与Qt相关的文献资源。developer.qt.nokia.com/books列举了有关Qt的书籍。初始学习阶段,读者可以阅读书籍Foundations of Qt Development[6],An Introduction to Design Patterns in C++(www.cppentry.com) with Qt4 [7]以及C++(www.cppentry.com) GUI Programming with Qt 4 [8]。也可以在Qt官方网站qt.nokia.com上观看Qt专家的讲座录像、Qt培训资料、电子杂志"Qt Quarterly"。在开发过程中,可以参考Qt联机文档,查看类的使用方法。如果想学习深层的编程(www.cppentry.com)技巧,可以参考Advanced Qt Programming [9]。该书的作者正是负责撰写Qt联机文档的Mark Summerfield。Qt的创始人之一Eirik Chambe-Eng为该书写了序言。
英文社区中,网站blog.qt.nokia.com对Qt进行一般性的讨论,网站labs.qt.nokia.com的blog部分含有一些技术水准较高的文章。developer.qt.nokia.com/forums讨论与Qt相关的技术问题。中文社区中,网站www.cuteqt.com,www.qtcn.org以及qt.csdn.net讨论Qt的使用与开发。
开发Qt应用程序时,开发者可以使用Qt软件包中的Qt Assisant阅读Qt的联机文档。该文档介绍类库中各个类的功能,类之间的继承关系,编程(www.cppentry.com)工具Qt Designer、Qt Linguist、QMake的使用等。这些文档的格式是Qt特有的,程序员只能使用Qt Assitant来查看。阅读文档内容时,用户可以使用Ctrl+鼠标滚轮更改字体大小,还可以在多个标签页中显示具有不同主题的内容。
2.与C++(www.cppentry.com)相关的文献资源。关于C++(www.cppentry.com)的书籍、论文、论坛非常多,即使那些被C++(www.cppentry.com)程序员奉为经典的书籍也多达十几本。以下是笔者推荐的一些书籍、网站。其中大多数文献都有对应的中文版,本文不再一一列举。对于具有一定英文基础的读者,笔者建议直接阅读英文原版文献,因为同一个C++(www.cppentry.com)概念在不同的中文版图书中会有不同的翻译,会增加阅读、交流难度。对于C++(www.cppentry.com)的初学者,如果他以前学习过C语言,可以选择下面的Thinking in C++(www.cppentry.com)一书,否则,可以选择下面的C++(www.cppentry.com) Primer一书。
C++(www.cppentry.com) Primer [10],详细、系统地阐述了C++(www.cppentry.com)语言的各种语言特性,文笔流畅,通俗易懂。该书涵盖了C语言的内容,因而适用于那些从未接触过C语言的读者。该书的作者之一Stanley B.Lippman曾和C++(www.cppentry.com)创始人Bjarne Stroustrup在Bell实验室一起工作,实现了cfront。另外一个作者Josée Lajoie是IBM加拿大实验室C++(www.cppentry.com)编译器项目组成员,自1990年起成为C++(www.cppentry.com)标准委员会的成员,曾担任该委员会的副主席。虽然他们对C++(www.cppentry.com)语言有着深刻的理解,但是他们在本书中却常常使用一些通俗易懂的小例子,来讲述为什么要使用某个语言特性以及如何使用它。
Thinking in C++(www.cppentry.com) [11],假设读者已经掌握了C语言。在批判C语言缺点的过程中,逐步引入C++(www.cppentry.com)的各个语言特性,借此证明这些语言特性的作用。书中例子短小精炼,仅用来说明某个语言特性,不涉及任何实际问题。该书分为两卷,第一卷介绍基本的C++(www.cppentry.com)语言特性,文笔流畅而严谨,第二卷介绍C++(www.cppentry.com)标准库、多继承、运行时类型信息等内容,虽然仍然保持着第一卷通俗易懂的风格,但是极少数内容似乎写得比较仓促。由于国内许多大学将C语言作为一门独立的课程,那些掌握了C语言的学生可以将该书作为学习C++(www.cppentry.com)语言的入门教材。
以上两本教材主要讨论了"C++(www.cppentry.com)是什么"。要想在编程(www.cppentry.com)实践中"正确、有效地使用C++(www.cppentry.com)",可以阅读下面的Effective C++(www.cppentry.com)一书以及本书。Effective C++(www.cppentry.com)(以及其姊妹篇More Effective C++(www.cppentry.com))将这些知识总结为85条编程(www.cppentry.com)准则,而本书结合Qt这一具体开源项目,以具体而鲜活的形式诠释这些知识。
Effective C++(www.cppentry.com) [2],文笔流畅、精炼、幽默。随着C++(www.cppentry.com)的演化,作者出版了1992、1998、2005年三个版本。这组书籍讨论如何更加有效地利用C++(www.cppentry.com)的各种语言特性,以设计出更好的面向对象程序。作者以50余个短小、具体、易于记忆的准则,总结了C++(www.cppentry.com)程序员应该做什么(以及原因)、不应该做什么(以及原因)。其中一些准则和设计策略相关,比如,是使用继承还是使用模板,是使用函数名重载还是使用默认参数,一个类的成员函数何时应该被定义为虚函数,何时应该被定义为普通函数。另外一些准则和某个具体的语言特性相关,比如,不要像C语言那样在函数体的开始部分定义所有变量,而是应该尽量推迟对象的定义。该书的作者还于1996年出版了另外一本风格相似的书More Effective C++(www.cppentry.com),给出了一些更深层次的准则,比如如何提升程序的性能,如何定义智能指针等。
对于那些具有一定开发经验、想要全面、准确地把握C++(www.cppentry.com)语言的程序员,可以参考下面的文献。
The C++(www.cppentry.com) Programming Language [12],由"C++(www.cppentry.com)之父"Bjarne Stroustrup撰写,具有1986、1991、1997、2000年四个版本,讨论如何使用C++(www.cppentry.com)的语言特性设计、编写更好的面向对象程序,该书最后一部分甚至专门从整体的软件开发与设计这一角度讨论C++(www.cppentry.com)的各种语言特性。该书系统、准确,书中的观点是作者几十年软件开发实践中宝贵经验的结晶,值得C++(www.cppentry.com)程序员仔细品位、借鉴。但是,作者有意将该书的读者定位为具有一定开发经验的C++(www.cppentry.com)程序员,加之文笔稍显晦涩,学术味重,使得该书不适合初学者。
要想开发一个高质量的软件系统,仅了解C++(www.cppentry.com)语言本身是不够的,开发人员还应该从软件工程这一更高的角度来看待软件开发。虽然这一领域的理论、文献更加繁多,但是笔者建议读者至少要系统地阅读下面这本教材。
Design patterns : elements of reusable object-oriented software [13],设计模式领域的经典之作。针对软件开发中经常出现的一些问题,该书以类图的形式给出每个问题的解决思路,阐述类和类之间的协作关系,讨论这种设计对系统的可复用性、性能或者其他方面的影响,并给出C++(www.cppentry.com)或者Smalltalk语言的具体实现。学习这些设计模式,读者一方面可以直接将它们应用在自己的设计中,另一方面可以揣摩如何利用C++(www.cppentry.com)语言的各种特性来解决实际设计问题。这些设计模式是该书作者们从大量设计优良的软件系统中总结而来的,因而在一个规模稍大、质量较高的软件系统中,我们可以找到这些模式的具体应用。Qt就是一个例子,本书将阐述Qt是如何使用其中一些设计模式来解决具体问题的。
关于C++(www.cppentry.com)的网络资源也非常丰富。导航网站www.robertnz.net/cpp_site.html含有多个链接,指向与C++(www.cppentry.com)相关的文献、库、编程(www.cppentry.com)规范、新闻组等。随书光盘"Z:\misc\Sites of interest to C++(www.cppentry.com) users.mht"保存了该网站的内容,供读者参考。另外一个类似的导航网站是C++(www.cppentry.com) FAQ(www.parashift.com/c++-faq-lite)。