




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
c+百科名片C+C+这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,“CPP”。 它是一种使用非常广泛的计算机编程语言。C+是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。 目录隐藏【子语言】 【语言发展】 【C+入门】 【C+的设计原则】 【C+的Hello World程序】 【C+程序员的数量】 【C+语言的应用】 【C+编程技巧】 【C+的集成开发环境】 【C+著作】 【C+名人坊】 【子语言】【语言发展】【C+入门】【C+的设计原则】【C+的Hello World程序】【C+程序员的数量】【C+语言的应用】【C+编程技巧】 【C+的集成开发环境】 【C+著作】 【C+名人坊】 C+发展历史简单介绍 C语言之所以要起名为“C”,是因为它是主要参考那个时候的一门叫B的语言,它的设计者认为C语言是B语言的进步,所以就起名为C语言;但是B语言并不是因为之前还有个A语言,而是B语言的作者为了纪念他的妻子,他的妻子名字的第一个字母是B; 当C语言发展到顶峰的时刻,出现了一个版本叫C with Class,那就是C+最早的版本,在C语言中增加class关键字和类,那个时候有很多版本的C都希望在C语言中增加类的概念;后来C标准委员会决定为这个版本的C起个新的名字,那个时候征集了很多种名字,最后采纳了其中一个人的意见,以C语言中的+运算符来体现它是C语言的进步,所以就叫C+,也成立了C+标准委员会;美国AT&T贝尔实验室的本贾尼斯特劳斯特卢普(Bjarne Stroustrup)博士在20世纪80年代初期发明并实现了C+(最初这种语言被称作“C with Classes”)。一开始C+是作为C语言的增强版出现的,从给C语言增加类开始,不断的增加新特性。虚函数(virtual function)、运算符重载(operator overloading)、多重继承(multiple inheritance)、模板(template)、异常(exception)、RTTI、命名空间(name space)逐渐被加入标准。1998年国际标准组织(ISO)颁布了C+程序设计语言的国际标准ISO/IEC 1488-1998。C+是具有国际标准的编程语言,通常称作ANSI/ISO C+。1998年是C+标准委员会成立的第一年,以后每5年视实际需要更新一次标准,下一次标准更新将是在2009年,目前我们一般称该标准C+0x。遗憾的是,由于C+语言过于复杂,以及他经历了长年的演变,直到现在(2009年)只有Visual C+ 2010 CTP开发环境的编译器完全符合这个标准。另外,就目前学习C+而言,可以认为他是一门独立的语言;他并不依赖C语言,我们可以完全不学C语言,而直接学习C+。根据C+编程思想(Thinking in C+)一书所评述的,C+与C的效率往往相差在正负5%之间。所以有人认为在大多数场合C+ 完全可以取代C语言(然而我们在单片机等需要谨慎利用空间、直接操作硬件的地方还是要使用C语言)。 编辑本段【子语言】根据Effective C+第三版第一条款的描述,现在C+由以下四个“子语言”组成:1、C子语言。C+支持C语言的几乎全部功能,在语法上与C语言仅有极微妙的差别(如括号表达式的左右值性,具体请参考C+标准文献)。2、面向对象的C+。C+首先作为一门面向对象的语言而闻名,这个特点在这里不再详述。3、泛型编程语言。C+强大(但容易失控的)模板功能使它能在编译期完成许多工作,从而大大提高运行期效率。4、STL(C+标准模板库)。随着STL的不断发展,它已经逐渐成为C+程序设计中不可或缺的部分,其效率可能比一般的naive代码低些,但是其安全性与规范性使它大受欢迎。 编辑本段【语言发展】C+语言发展大概可以分为三个阶段:第一阶段从80年代到1995年。这一阶段C+语言基本上是传统类型上的面向对象语言,并且凭借着接近C语言的效率,在工业界使用的开发语言中占据了相当大份额;第二阶段从1995年到2000年,这一阶段由于标准模板库(STL)和后来的Boost等程序库的出现,泛型程序设计在C+中占据了越来越多的比重性。当然,同时由于Java、C#等语言的出现和硬件价格的大规模下降,C+受到了一定的冲击;第三阶段从2000年至今,由于以Loki、MPL等程序库为代表的产生式编程和模板元编程的出现,C+出现了发展历史上又一个新的高峰,这些新技术的出现以及和原有技术的融合,使C+已经成为当今主流程序设计语言中最复杂的一员。 编辑本段【C+入门】C+是一种语言,仅仅是它的语法、特性、标准类库就已经是一门非常高深的课程,所以在开始学习的时候,必须先要打好基础。在市面上有很多Visual C+的书,虽然其中可能会花1-2章来介绍C+的基本特性,但是那绝对不会让你入门。因此,初学者学习C+应该选择针对C+语言本身的书籍,而不能是针对Visual C+、MFC或者Windows API的。学习C+应该由易至难,循序渐进。以前经常有人说学习C+之前应该学习C语言。事实上那不是必须的,C+和C语言虽然有关系,但仍然是两种不同的语言。当然,在学习C+之前学习过其他编程语言是很有好处的。那会使学习C+的速度更快,毕竟很多计算机语言的概念都是相通的。而对于零基础的初学者来说,则是应该静下心来,不要急躁。要成为C+的高手,不是那么容易的,必须要花很大的努力。从入门教材的选择上,主要看学习者的自身情况。如果已经有过学习高级语言的经历,那么推荐使用谭浩强的C+程序设计。注意是04年版的,06年版的那本书是阉割版,上来就面向对象。虽然说C和C+是相似的,但是前面已经说了,C和C+应该作为两种语言来学习,所以06年的那本内容就稍微欠缺一点了。谭浩强04版的这本书内容比较规整的,条理也很清晰。如果有过其他高级语言的基础,那么估计半年就能对C+的概况有个了解了。谭浩强老师的书已经成为了全国各大高等院校的教科书,是比较受到认可的。如果是从零基础开始学C+,那么推荐使用潘嘉杰的易学C+。这本书是2008年出的新书,听说是个学生在读书的时候写的。这本书网上有下载免费的电子版。这本书主要就是针对初学者的,讲得也比较生动有趣,比较提得起学习的兴趣。所以没有基础的初学者选这本书也是不错的,就是想要很快成为高手,可能看这本书还不够。至于看完入门的书之后,就应该看一些高层次的书了。比如The C+ Programming Language和C+ Primer,同时也可以向STL、MFC、API等各个方向发展。如果对别的语言感兴趣,还能去看看C#和Java,它们和C+从语法和很多概念上都是类似的。 编辑本段【C+的设计原则】 C+设计成静态类型、和C同样高效且可移植的多用途程序设计语言。 C+设计成直接的和广泛的支援多种程序设计风格(程序化程序设计、资料抽象化、面向对象程序设计、泛型程序设计)。 C+设计成给程序设计者更多的选择,即使可能导致程序设计者选择错误。 C+设计成尽可能与C兼容,籍此提供一个从C到C+的平滑过渡。 C+避免平台限定或没有普遍用途的特性。 C+不使用会带来额外开销的特性。 C+设计成无需复杂的程序设计环境。出于保证语言的简洁和运行高效等方面的考虑,C+的很多特性都是以库(如STL)或其他的形式提供的,而没有直接添加到语言本身里。关于此类话题,C+之父的C+语言的设计和演化 里做了详尽的陈述。 编辑本段【C+的Hello World程序】在使用兼容C89标准(也称为ANSI C)的编译器时,下面这个程序显示“Hello, world!”然后结束运行: (事实上这并不是符合98标准ISO C+的C+程序,而且在多数编译器上这个程序也不能运行,若要在比较旧的编译器上编译该程序,应将iostream改为iostream.h)#include int main()printf(Hello, world!n);return 0;在使用兼容C+98标准(ISO/IEC 14882-1998)的编译器时,下面的程序也是可以的: #include int main()cout Hello, world! endl;return 0;在使用兼容C+ STL的编译器时,应当是:#include using namespace std;int main()coutHello,world!endl;return 0;根据ISO C+的规定,main函数的形式只能是 int main(void) .以及int main(int argc,char * argv) . 尽管如此,但在Visual C+ 2003以前的Microsoft Studio编译器上, void main() . 也被支持,但这并不正确,也不标准。这样的写法会使程序代码丧失跨平台的特性。每年都有专业人士规定c+的语法,这也是c+优于其他编程语言的原因之一,由它衍生的Java已成为通用编程语言中广受欢迎的一种。 编辑本段【C+程序员的数量】分析机构EvansData定期对开发人员展开调查,其调查结果与Stroustrup提出的C+正在扩张的说法相违背。EvansData的数据显示,以C+为工具的开发人员在整个开发界所占的比例由1998年春天的76%下降至2004年秋的46%。 Forrester最新的调查显示,C+、微软VisualBasic和Java是众多公司产品体系的首选语言。对100家公司的调查显示,C/C+、VisualBasic和Java在产品体系中的使用比例分别是59%、61%和66%。 传统上认为,C+相对于目前一些新潮的语言,如Java、C#,优势在于程序的运行性能。这种观念并不完全。如果一个人深信这一点,那么说明他并没有充分了解和理解C+和那个某某语言。同时,持有这种观念的人,通常也是受到了某种误导(罪魁祸首当然就是那些财大气粗的公司)。对于这些公司而言,他们隐藏了C+同某某语言间的核心差别,而把现在多数程序员不太关心的差别,也就是性能,加以强化。因为随着CPU性能的快速提升,性能问题已不为人们所关心。这叫“李代桃僵”。很多涉世不深的程序员,也就相信了他们。于是,大公司们的阴谋也就得逞了。 一般认为,使用Java或C#的开发成本比C+低。但是,如果你能够充分分析C+和这些语言的差别,会发现这句话的成立是有条件的。这个条件就是:软件规模和复杂度都比较小。如果不超过3万行有效代码(不包括生成器产生的代码),这句话基本上还能成立。否则,随着代码量和复杂度的增加,C+的优势将会越来越明显。造成这种差别的就是C+的软件工程性。在Java和C#大谈软件工程的时候,C+实际上已经悄悄地将软件工程性提升到一个前所未有的高度。这一点被多数人忽视,并且被大公司竭力掩盖。 语言在软件工程上的好坏,依赖于语言的抽象能力。从面向过程到面向对象,语言的抽象能力有了一个质的飞跃。但在实践中,人们发现面向对象无法解决所有软件工程中的问题。于是,精英们逐步引入、并拓展泛型编程,解决更高层次的软件工程问题。(实际上,面向对象和泛型编程的起源都可以追溯到1967年,但由于泛型编程更抽象,所以应用远远落后于面向对象)。 编辑本段【C+语言的应用】哪些程序是用C+写的:主流的3种操作系统Windows,Linux,Unix,内核都是用C语言和汇编写的,上层高级特性是用C+写的。魔兽世界等几乎所有的网络游戏,百度搜索引擎(B),我们所用的大多数软件都是用C+写的(硬件也有很多用到C+的)。C+之父Bjarne Stroustrup列举的C+应用:A:Software for large-scale e-commerceApple: OS X is written in a mix of language, but a few important parts are C+. AT&T:The largest US telecommunications provider. o provisioning systems o systems for rapid network recovery after failureAutodesk: A large number of major number of application in the CAD domainEricsson:o server platform.o TDMA-CDMA HLRo GSM-TDMA-CDMA mobility gatewayGoogle: web search engine, etc。HP: Here is a tiny fraction of HPs C+ apps: o C, C+, Fortran90 compilers, and linker for the new HP IA64 platform (these add to more than 1 million lines of C+ code).IBM: o OS/400. o K42: a high performance, open source, general-purpose operating system kernel for cache-coherent multiprocessors.Intel:o Vtune performace analysis software o compilers and optimizers o lots of chip design and manufacturing softwareJPL (Jet Propulsion Lab, NASA): Mars rover autonomous driving system (incl. scene analysis and route planning). C+ on Mars! Also lots of supporting software on the ground (i.e. Earth).Microsoft:o Windows XP o Windows NT (NT4 and 2000) o Windows 9x (95, 98, Me) o Microsoft Office (Word, Excel, Access, PowerPoint, Outlook) o Internet Explorer (including Outlook Express) o Visual Studio o SQLMozilla: Firefox browser and Thunderbird mail client (open source)MySQL: MySQL Server (about 250,000 lines of C+) and MySQL Cluster. Arguably the worlds most popular open source databaseNokia: o Mobile Communications radio-station/internet bridges: FlexiGGSN (Gateway GPRS Support Node) and FlexiSGSN (Server GPRS Support Node). o MSC/HLR Sun: o The HotSpot Java Virtual Machine is written in C+Symbian OS: rationale: . using C+ for all system code, from the kernel upwards. This is one of the most widespread OSs for cellular phonesKDE from linux is written in C+.telephone systems: I think it would be almost easier to list the systems which arent written in C+更详细的应用列表1:/bs/applications.html 更详细的工业列表2:/vincent/implementations.html 编辑本段【C+编程技巧】一、使用new和delete进行动态内存分配和释放 运算符new和delete是C+新增的运算符,提供了存储的动态分配和释放功能。它的作用相当于C语言的函数malloc()和free(),但是性能更为优越。使用new较之使用malloc()有以下的几个优点: (1)new自动计算要分配类型的大小,不使用sizeof运算符,比较省事,可以避免错误。 (2)自动地返回正确的指针类型,不用进行强制指针类型转换。 (3)可以用new对分配的对象进行初始化。 使用例子: (1)int* p; p=new int10; /分配一个含有10个整数的整形数组 delete p; /删除这个数组 (2)int* p; p=new int (100);/动态分配一个整数并初始化 二、使用inline内联函数替代宏调用 对于频繁使用的函数,C语言建议使用宏调用代替函数调用以加快代码执行,减少调用开销。但是宏调用有许多的弊端,可能引起不期望的副作用。例如宏:#define abs(a) (a)0?(-a):(a), 当使用abs(i+)时,这个宏就会出错。 所以在C+中应该使用inline内联函数替代宏调用,这样既可达到宏调用的目的,又避免了宏调用的弊端。 使用内联函数只须把inline关键字放在函数返回类型的前面。例如: inline int Add(int a,int b);/声明Add()为内联函数 这样编译器在遇到Add()函数时,就不再进行函数调用,而是直接嵌入函数代码以加快程序的执行。 三、使用函数重载 在C语言中,两个函数的名称不能相同,否则会导致编译错误。而在C+中,函数名相同而参数数据类型不同的两个函数被解释为重载。例如: void PutHz(char* str);/在当前位置输出汉字 void PutHz(int x,int y,char * str);/在x,y处输入数字 使用函数重载可以帮助程序员处理更多的复杂问题,避免了使用诸如intabs()、fabs()、dabs()等繁杂的函数名称;同时在大型程序中,使函数名易于管理和使用,而不必绞尽脑汁地去处理函数名。同时必须注意,参数数据类型相同,但是函数返回类型不同的两个函数不能重载。四、使用引用(reference)代替指针进行参数传递 在C语言中,如果一个函数需要修改用作参数的变量值的时候 ,参数应该声明为指针类型。例如: void Add(int *a)(*a)+;调用时则使用 Add(&x); /其中x为int或可以转化为int的类型,如unsigned int, 但这时候编译器通常会给出warning对于复杂的程序,使用指针容易出错,程序也难以读懂。在C+中,对于上述情况 可以使用引用来代替指针,使程序更加清晰易懂。引用就是对变量取的一个别名,对引用进行操作,这就相当于对原有变量进行操作。例如使用引用的函数定义为: void Add(int& a)a+;/a为一个整数的引用 调用时使用 Add(x);/其中x为int这个函数与使用指针的上一个函数的功能是一样的,然而代码却更为简洁和清晰易懂。 五、使用缺省参数 在C+中函数可以使用缺省参数,例如: void PutHzxy(char *str,int x=-1, int y=-1)if(x=-1)x=wherex();if(y=-1)x=wherex();moveto(x,y);PutHx(str);可以有三种方式调用函数PutHzxy(),例如: PutHzxy(C+语言);/使用缺省参数在当前位置输出 PutHzxy(C+语言,10,10);/没有使用缺省参数 PutHzxy(C+语言,10);/对y使用缺省参数,指定x的位置通常的情况下,一个函数应该具有尽可能大的灵活性。使用缺省参数为程序员处理更大的复杂性和灵活性问题提供了有效的方法,所以在C+的代码中都大量地使用了缺省参数。 需要说明的是,所有的缺省参数必须出现在不缺省参数的右边。亦即,一旦开始定义缺省参数,就不可再说明非缺省的参数。 例如:void PutHzxy(char*str,int x=-1,int y=-1)/正确 void PutHzxy(int x=-1,int y=-1,char*str)/错误 六、使用STL STL(Standard Template Library,标准模板库), STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),并包括一些工具类如auto_ptr。几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。#include/ 包含相关的头文件/typedef std:vector intvector;/使用typedef 使代码看起来更简洁int main()intvector vi;for(int i=0;i10,i+)vi.push_back(i);/使用push_back添加元素for(int i=0;ivi.size();i+)std:coutvii ;/操作符被重载,使得我们可以像访问数组一样访问vector中的元素 编辑本段【C+的集成开发环境】1.visual studio(visual C+)2.Borland C+ Builder3.eclipse(CDT)4.Dev-C+5.Code:Blocks6.Codelite7.C-Free8.linux系统pc上的编译工具链为gcc、ld、objcopy、objdump等,它们编译出来的程序在x86平台上运行 编辑本段【C+著作】The C+ Standard Library: A Tutorial and Reference原文版 中文版:C+标准程序库:自修教程与参考手册 这是一本百科全书式的C+标准库著作,是一本需要一再查阅的参考大全。它在完备性、细致性以及精确性方面都是无与伦比的。本书详细介绍了每一标准库组件的规格和用法,内容涵盖包括流和本地化在内的整个标准库而不仅仅是STL。正如本书副标题所示,它首先适合作为教程阅读,尔后又可用作参考手册。 浅显易懂的写作风格使得这本书非常易读。如果你希望学习标准库的用法并尽可能地发挥其潜能,那你必须拥有这本书。正如网络上所言,这本书不仅仅应该摆在你的书橱中,更应该放到你的电脑桌上。我向每一位职业C+程序员强烈推荐。 Standard C+ IOStreams and Locales: Advanced Programmers Guide and Reference原文版 中文版标准C+输入输出流与本地化 C+标准库由STL、流和本地化三部分构成。关于STL的书市面上已经有不少,但罕见流和本地化方面的专著。本书是这两个领域中最优秀的一本,迄今为止没有任何一本书比这一本更全面详尽地讨论了流和本地化。如果你不满足于停留在“会用”流库的层面,千万不要错过它。 2001年夏天,我草草翻阅过这本书的中文版,从内容到包装都给我留下了比较深刻的印象不过负面的居多一些。2003年秋天,无意中得知某网络书店正以超低价格甩卖这本书的中译本,情不自禁,一阵唏嘘。 Effective STL影印版、中文版 读完Scott 的Effective C+和More Effective C+的中译本之后,我一直期待这本书的中文版。我从潘爱民先生的个人主页上了解到,他和他的合作伙伴似乎早已完成了这本书的翻译工作,可惜至今市面上仍不得见。幸运的是,我们可以看到它的原版。 本书是使用STL的程序员必读之作。在这本书中,Scott向我们讲述STL容器和算法的工作机制以及如何以最佳方式使用它们。和Scott的其他作品一样,这本书的写作风格清晰、精确,具有极佳的可读性。看过这本书以后,我想你也许会和我以及其他C+程序员一样产生这样的想法:Scott什么时候会写出一本“More Effective STL”? Generic Programming and the STL: Using and Extending the C+ Standard Template Library影印版、中文版泛型编程与STL 关于STL,我还提醒你留心Matthew H. Austern的Generic Programming and the STL: Using and Extending the C+ Standard Template Library(泛型编程与STL,中国电力出版社)。这本书散发着浓厚的学院气息。Andrew Koenig和Barbara Moo在Accelerated C+: Practical Programming by Example一书末尾郑重推荐另外两本进阶好书(除了他们自己的Ruminations on C+外),其中一本是TCPL,另外一本就是本书! 网络编程 在网络编程时代,C+应该扮演着怎样的角色,让ACE(Adaptive Communications Environment)来告诉你。 Douglas C. Schmidt, Stephen D. Huston,C+ Network ProgrammingVolume 1: Mastering Complexity with ACE and Patterns、Volume 2: Systematic Reuse with ACE and Frameworks 中文版:,C+网络编程卷1:运用ACE和模式消除复杂性、卷2:基于 ACE 和框架的系统化复用 采用C+进行企业级网络编程,目前ACE(以及这两本书)是一个值得考虑的选择。ACE是一个面向对象、跨平台、开放源码的网络编程框架,目标在于构建高性能网络应用和中间件。Douglas是ACE的创始人,Stephen则已为ACE提供了数年的技术支持和顾问服务,两位都是ACE社群(是的,ACE的影响和实际应用的程度已经形成了一个社群)的专家。 ACE并不单单被大学和研究所追捧,它已经被成功地应用于世界上成千上万个商业应用中。在电信、宇航、医药和财经领域的网络系统中,ACE已经并继续发挥着重要的作用。如果你准备开发高性能通讯系统,你应该考虑考虑这一汇集世界顶尖专家智慧的成果。 除了使用C+面向对象设计技术和模板等高级语言特性外,ACE还运用了大量的模式。C+网络编程卷1和卷2并不仅仅教你关于ACE的方方面面,它还会教给你模式和通用框架设计等高级技术等。所以,作为一名中、高级C+程序员,即使你很少进行正儿八经的C+网络程序设计,阅读这两本书同样可以从中受益。 是的,并非所有网络应用都要使用Web服务器(以及其他应用服务器)和重量级组件模型,换个思路,它们或许也可以从轻量级的ACE组件中获益。 杂项 以下几本书所以被列入“杂项”单元,是因为我没有考虑到合适的归类方法,它们和上面的书籍一样,值得一读。 Bruce Eckel,Thinking in C+影印版二版、三版(又名卷二) 中文C+编程思想二版、卷一:标准C+导引 卷二:实用编程技术 Thinking in C+的第1版于1996年荣获“软件研发”杂志评选的图书震撼大奖。最新推出的第2版对内容进行了大幅改写和调整,以反映C+标准化带来的影响以及近几年面向对象领域最新研究和实践成果。“输入输入流”、“多重继承”、“异常处理”和“运行时类型识别”等高级主题连同C+标准化以后增加的一些内容则被放入第二卷中。Bruce是一名经验丰富的C+讲师和顾问,其培训和写作经验都是世界一流水准,他的作品比那些“玩票”的技术人员写的东西更能吸引读者。事实上,在同类图书中,对于大多数读者而言,这本书的可读性要超过TCPL和C+ Primer。顺带一提,访问作者的站点,你可以先睹第二卷的风采。 Andrew Koenig, Barbara E. Moo,Ruminations on C+: A Decade of Programming Insight and Experience原版、中文版C+沉思录 Andrew是世界上屈指可数的C+专家。这是一本关于C+编程思想和程序设计技术而非语言细节的著作。如果你已经具有一定的基础,这本书将教你在进行C+编程时应该怎样思考,应该如何表达解决方案。整本书技术表达透彻,文字通俗易懂。Bjarne这样评价这本书:本书遍布“C+是什么?C+能够做什么?”的真知灼见。 Stanley B. Lippman,Inside The C+ Object Model影印版、中文版深度探索C+对象模型 从编译器的角度观察C+可以使你知其然并知其所以然。本书探讨了大量的C+面向对象程序设计的底层运作机制,包括构造函数、函数、临时对象、继承、虚拟、模板的实例化、异常处理、运行期类型识别等,另外还介绍了一些在实现C+对象模型过程中做出的权衡折衷。喜欢刨根问底的C+程序员不要错过这本书。 Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Design Patterns: Elements of Reusable Object-Oriented software Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides,Design Patterns: Elements of Reusable Object-Oriented software影印版、中文版设计模式:可复用面向对象软件的基础 设计可复用的面向对象的软件,你需要掌握设计模式。本书并非专为C+程序员而写,但它采用了C+(以及Smalltalk)作为主要示例语言,C+程序员尤其易于从中受益。四位作者都是国际公认的面向对象软件领域专家,他们将面向对象软件的设计经验作为设计模式详细记录下来。这本书影响是如此深远,以至于四位作者以及本书都被昵称为GoF(Gang of Four)。本书学院气息浓厚,行文风格严谨简洁,虽然它不如某些讲解模式的书籍易读,但真正要精准地理解设计模式,本书是终极权威。学习设计模式,这本书需要一而再、再而三的咀嚼。顺带一句:请将设计模式化作开拓思维的钥匙,切莫成为封闭思维的枷锁。 John Lakos,Large-Scale C+ Software Design中文版大规模C+程序设计、候捷:STL 源码剖析 还有一些C+好书值得一读,恕此处无法一一列出。例如John Lakos的著作Large-Scale C+ Software Design(大规模C+程序设计,中国电力出版社)和侯捷先生的STL 源码剖析(华中科技大学出版社)等。 STL 源码剖析是一本很有特色的书,但我认为它还可以更好。我个人期待侯捷先生自第一版发行以来经过对模板技术的沉淀和再思考之后,再写一本剖析得更深入、更透彻并且更全面的“第二版”。遗憾的是,侯捷先生在完成C+ Templates: The Complete Guide一书的翻译后似乎决定暂时告别模板、泛型编程和STL领域。 使用C+成功开发大规模软件系统,不仅需要很好地理解大多数C+书籍中讲述的逻辑设计问题,更需要掌握大规模C+程序设计中讲述的物理设计技术。当然,这本书的确有点过时了,不过,如果你的精力和金钱都比较宽绰,买一本看看并无坏处。 至此,我想有必要声明一下,有一些(好)书没有得到推荐,主要原因如下: 以上这些书已经足够多、足够好了。 我不会推荐通过正常渠道很难购买到的书籍 不管是中文版还是英文版。 作(译)者名气大小不影响我的推荐。我们是在看书,不是看人。 我不会推荐我从来没有看过的书。我至少要看过其中的某个版本(包括电子档)。这个“看”,一般指“认真阅读”,不过有一些也只能算是“浏览”。 结语 作为一名普通技术写译者,我深知技术创作和翻译的艰辛(和快乐),并多多少少了解一些有关技术书籍创作、翻译、制作、出版以及市场推介背后的细节。今天,我不会再对一本看上去差强人意的图书信口开河。罗列同一本书的各种版本的用意只在于为你多提供一些信息,让你多一种选择。 在本文成文的后期,我给Bjarne写了一封信,请教如果他来写这篇文章会怎么写。他给了我简明扼要的建议。在肯定以上列出的绝大部分图书都是世界顶尖水平的C+著作的同时,Bjarne提醒我别忘了向专家级程序员推荐The C+ Standard : Incorporating Technical Corrigendum No. 1 The C+ Standard : Incorporating Technical Corrigendum No. 1 Bjarne还友好地提醒我,在我的推荐列表中没有哪一本有助于C+程序员进行Windows编程这正是我的本意。在这篇文章中,我只推荐、点评平台中立的C+著作(网络编程除外)和操作系统无关,和集成开发环境无关,我甚至幻想它们和编译器也无关。你可以根据业务开发需要,选读自己喜爱的领域相关的C+书籍。 说到“系统无关、平台中立”,我不由得想起了“抽象层”的概念。开发实际应用的C+程序员通常工作于特定操作系统、特定开发环境和特定业务领域之中,而对标准C+和C+标准库扎实而深刻的把握,无疑是你得以在不同的操作系统、不同的开发环境以及不同的业务领域之间纵横驰骋的“抽象”本钱。C+面向对象程序设计(作者:Walter Savitch) 这本书是老外出的书,从基础到深入,很容从C过渡到C+C+ Primer中文版(第4版)(一本久负盛名的C+经典教程)作者: (美)Stanley B. Lippman Barbara E. Moo Jose LaJoie 著,李师贤 等译出 版 社: 人民邮电出版社出版时间: 2006-3-1 字数: 1149000 版次: 1 页数: 745 印刷时间: 2006/03/01 开本: 印次: 纸张: 胶版纸 I S B N : 9787115145543 包装: 平装 编辑本段【C+名人坊】有两位Google Maps API的初学者向我请教他们按照最简单例子写的程序为什么不能正常的运行。其中一位用GTalk跟我交流,我仔细了看了他的代码,没看出问题,把代码保存在本地,打开Firefox的错误控制台,用Firefox打开他的页面。出错的那一行被清晰的显示出来,我再仔细端详那句话,原来有两个应该是英文逗号的地方,写上了中文逗号。另一位,在我的论坛跟我交流他的Google Maps API中遇到的问题,我看他代码的时候也没有马上发现问题。然而,同样在用Firefox打开后,问题很明显的找到了,原来是一个方法openInfoWindow被他写成OpenInfoWindow了。在我帮助别人解决的程序调试问题中,这是非常常见的。人人都可能打出中文逗号,人人都可能把大小写写错。但是在我帮助他们解决问题以后,他们总是感慨的说,谢谢我解决了这个问题,这个问题困扰了他们几个小时,甚至是几天。这其实并不是只有初学者才会遇到的问题,我还帮助过些有非常丰富经验的工程师解决问题,有时候问题仅仅出自某个参数没有传递进来,或者是拼接字符串的时候少些了一个冒号,或者是拼接地址的时候漏掉了http:。我甚至帮助一些人调试一些我根本不懂的语言的程序,因为多半出现的问题,都和语言特性无关,不是程序员写错了字符,就是写错了逻辑,或者是错误理解了一个函数。出问题是正常的,写程序是一个复杂的边思考边打字的过程,笔误和一时糊涂都是难以避免的。程序员一般把这种问题叫做低级问题,因为这类问题跟你的智商完全无关,任何人都可能犯。但是,问题在于,有时候即使是很优秀的程序员,也会被一个低级错误困扰,可能会几天都解决不了。所以,关键在于,如何找到问题。 遇到问题的时候:1,不要怨天怨地。出了问题,当然有可能是系统的bug,API的问题,但是那些几率往往比你犯低级错误的几率要低多了,先从自己身上找原因,是不是自己写错了。 2,要掌握工具。最低限度你要会写Log,最好是Log和调试器结合。好 的工具可以大大的提高效率。以前有人跟我
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电网造价考试题及答案
- 置业顾问年工作总结
- 法学资格证试题及答案
- 脱硫安规考试试题及答案
- 幼儿园元宵节活动总结
- 家电公司电商客服管理细则
- 2025年执业药师之中药学综合知识与技能能力检测试卷A卷附答案
- 保安水电安全知识培训课件
- 易错题专项单元专项Unit7六选择合适的选项补全对话三年级英语上册译林版含答案
- 江苏医院消防整改方案(3篇)
- 提高肋骨骨折影像学诊断
- 东华临床科研数据管理系统解决方案白皮书
- GB 30616-2020食品安全国家标准食品用香精
- GA/T 1343-2016防暴升降式阻车路障
- (推荐下载)家族性结肠息肉病教学课件
- 《材料成型装备及自动化》课程大纲
- 公文写作高频词库
- 临时用电JSA分析表
- DB33-T1217-2020《屋面工程质量验收检查用表标准》
- 固定式压力容器年度检查报告
- (高清版)建筑楼盖结构振动舒适度技术标准JGJ_T 441-2019
评论
0/150
提交评论