C++必知必会(职业C++程序员必备常识)
基本信息
- 作者: (美)Stephen C.Dewhurst [作译者介绍]
- 译者: 荣耀
- 丛书名: 图灵程序设计丛书 C/C++系列
- 出版社:人民邮电出版社
- ISBN:9787115240453
- 上架时间:2010-11-17
- 出版日期:2010 年12月
- 开本:16开
- 页码:202
- 版次:2-1
- 所属分类:
计算机 > 软件与程序设计 > C++ > C++
编辑推荐
职业C++程序员必备常识
初学者登堂入室的阶梯
C++界20年经验结晶
内容简介回到顶部↑
《c++必知必会》描述了c++编程和设计中必须掌握但通常被误解的主题,这些主题涉及的范围较广,包括指针操作、模板、泛型编程、异常处理、内存分配、设计模式等。作者根据本人以及其他有经验的管理人员和培训老师的经验总结,对与这些主题相关的知识进行了精心挑选,最终浓缩成63条。每一条款所包含的内容均为进行产品级c++编程所需的关键知识。作者称这些知识为c++程序员必备的“常识”,其实并非意味着简单或平庸,而是“必不可少”。
《c++必知必会》适合于中、高级c++程序员,也适合c或java程序员转向c++程序设计时参考。
《c++必知必会》适合于中、高级c++程序员,也适合c或java程序员转向c++程序设计时参考。
作译者回到顶部↑
本书提供作译者介绍
作者:(美国)杜赫斯特(Stephen C.Dewhurst) 译者:荣耀
杜赫斯特(Stephen C. Dewhurst),贝尔实验室最早的C++程序员之一。有着20多年的C++应用经验,涉及的应用领域包括编译器设计、安全交易、电子商务以及嵌入式电信产品等。Steprlen是The C++ Source顾问委员会的成员之一,是C/C++ User Joumal的资深编辑,并担任C++Repot的专栏作家他还是两款C++编译器的作者,曾发表过大量关于编译器设计和C++编程技术的文章。
荣耀,南京师范大学教师,一名C++讲师和研究者,独立IT培训.. << 查看详细
目录回到顶部↑
条款1 数据抽象 1
条款2 多态 2
条款3 设计模式 5
条款4 stl 8
条款5 引用是别名而非指针 10
条款6 数组形参 13
条款7 常量指针与指向常量的指针 16
条款8 指向指针的指针 19
条款9 新式转型操作符 21
条款10 常量成员函数的含义 25
条款11 编译器会在类中放东西 29
条款12 赋值和初始化并不相同 31
条款13 复制操作 34
条款14 函数指针 37
条款15 指向类成员的指针并非指针 40
条款16 指向成员函数的指针并非指针 43
条款17 处理函数和数组声明 46
条款18 函数对象 48
条款19 command模式与好莱坞法则 52
条款20 stl函数对象 55
条款2 多态 2
条款3 设计模式 5
条款4 stl 8
条款5 引用是别名而非指针 10
条款6 数组形参 13
条款7 常量指针与指向常量的指针 16
条款8 指向指针的指针 19
条款9 新式转型操作符 21
条款10 常量成员函数的含义 25
条款11 编译器会在类中放东西 29
条款12 赋值和初始化并不相同 31
条款13 复制操作 34
条款14 函数指针 37
条款15 指向类成员的指针并非指针 40
条款16 指向成员函数的指针并非指针 43
条款17 处理函数和数组声明 46
条款18 函数对象 48
条款19 command模式与好莱坞法则 52
条款20 stl函数对象 55
译者序回到顶部↑
尽管C++越来越像是“专家专用”的语言,精通它需要付出极大的努力,然而并非每一个人都需要成为C十+语言专家。对于大多数人而言,学习C++的目的是为了“致用”,而非研究语言本身。我们的精力应该放在有效地掌握编程必备知识上,以便能够胜任臼标领域的软件开发。职业程序员往往更应该是“领域专家”而非“语言专家”。
本书提供了C++程序员所必须具备的“常识”。这里所说的“常识”并非意味着简单或平庸,而是指“必不可少”,事实上,有些内容相当高级,比如设计模式和泛型编程。本:书对散布于许多其他C++书籍中的知识进行了精心挑选,最终浓缩成63条。每一条款相对独立,可以随机查阅。许多条款内部还含有交叉索引,便于加深对该主题的理解。
这些条款涉及的主题范围较广,除了指针操作、面向对象、异常处理以及内存分配等外,对于现代C++编程技术劝;有很好的描述,其中仅设计模式就占了好几个条款。除了一个总论性的条款外,另外还具体介绍了Prototype、Factory Method、Command、Template Method等经典模式,而trait、policy以及智能指针亦可归人这个范畴。作者“短、平、快”式的介绍,可以使你迅速掌握这些常用模式的概念和用法。
现代C++程序员应该像熟悉面向对象编程那样熟悉模板和泛型编程。本书中,模板和泛型编程内容占了条款总数的近1/3,其中包括:类模板显式特化、模板局部特化、类模板成员特化、成员模板、嵌入的类型信息、模板的模板参数、模板实参推导、重载函数模板等等。这些都是进行泛型编程不可或缺的知识。
作者Steve Dewhurst是贝尔实验室C++元老之一,有着20多年C++应用经验,所解决的问题涉及多个领域,并是两款C++编译器的作者。他的文风一向简练明快,并不失尖锐。阅读本书,可以给你带来“拨开迷雾见青天”的感觉。
根据我对国内C++应用现状的了解,我认为本书首先适合业界程序员用作快速参考。一些程序员项目经验不少,但对C++的使用仅限于一小套子集,而且往往是一套原始的子集。这本小册子可以快速弥补这方面的知识结构缺陷。作者奉行“有所为、有所不为”的指导思想,忽略了复杂而很少使用的细节,而是带领读者直奔主题,抓住重点。此外,有了实战经
对于已经系统地学习过一门C++课程的在校大学生来说,这本小书可以开阔你的眼界。如果你的C柑基础尚不足以/顷畅地阅读书中部分条款,读来如雾里看花,或因作者点到为止而感觉意犹未尽,可以考虑选读书末“参考文献”中列出的书籍,它们大都有高品质的中文版。
在沉寂许久之后,一批优秀的C++新作终于陆续面世,我有幸参与翻译包括C++ Common
Knowledge ImperfectC++以及C++ Template Metaprogramming等在内的几本佳作。希望在第一时间完成翻译的这本新书,能够给期待已久的你带来新鲜的快乐!
本书提供了C++程序员所必须具备的“常识”。这里所说的“常识”并非意味着简单或平庸,而是指“必不可少”,事实上,有些内容相当高级,比如设计模式和泛型编程。本:书对散布于许多其他C++书籍中的知识进行了精心挑选,最终浓缩成63条。每一条款相对独立,可以随机查阅。许多条款内部还含有交叉索引,便于加深对该主题的理解。
这些条款涉及的主题范围较广,除了指针操作、面向对象、异常处理以及内存分配等外,对于现代C++编程技术劝;有很好的描述,其中仅设计模式就占了好几个条款。除了一个总论性的条款外,另外还具体介绍了Prototype、Factory Method、Command、Template Method等经典模式,而trait、policy以及智能指针亦可归人这个范畴。作者“短、平、快”式的介绍,可以使你迅速掌握这些常用模式的概念和用法。
现代C++程序员应该像熟悉面向对象编程那样熟悉模板和泛型编程。本书中,模板和泛型编程内容占了条款总数的近1/3,其中包括:类模板显式特化、模板局部特化、类模板成员特化、成员模板、嵌入的类型信息、模板的模板参数、模板实参推导、重载函数模板等等。这些都是进行泛型编程不可或缺的知识。
作者Steve Dewhurst是贝尔实验室C++元老之一,有着20多年C++应用经验,所解决的问题涉及多个领域,并是两款C++编译器的作者。他的文风一向简练明快,并不失尖锐。阅读本书,可以给你带来“拨开迷雾见青天”的感觉。
根据我对国内C++应用现状的了解,我认为本书首先适合业界程序员用作快速参考。一些程序员项目经验不少,但对C++的使用仅限于一小套子集,而且往往是一套原始的子集。这本小册子可以快速弥补这方面的知识结构缺陷。作者奉行“有所为、有所不为”的指导思想,忽略了复杂而很少使用的细节,而是带领读者直奔主题,抓住重点。此外,有了实战经
对于已经系统地学习过一门C++课程的在校大学生来说,这本小书可以开阔你的眼界。如果你的C柑基础尚不足以/顷畅地阅读书中部分条款,读来如雾里看花,或因作者点到为止而感觉意犹未尽,可以考虑选读书末“参考文献”中列出的书籍,它们大都有高品质的中文版。
在沉寂许久之后,一批优秀的C++新作终于陆续面世,我有幸参与翻译包括C++ Common
Knowledge ImperfectC++以及C++ Template Metaprogramming等在内的几本佳作。希望在第一时间完成翻译的这本新书,能够给期待已久的你带来新鲜的快乐!
前言回到顶部↑
一本书之所以成功,不在于书本身的内容,而在于它的未尽之言。
——马克·吐温
尽可能简单,但不过分简单。
——阿尔伯特·爱因斯坦
一个对读者的能力持怀疑态度的作家根本不能称其为作家,只不过是个阴谋家而已。
——E. B. 怀特
当Herb Sutter接手C++ Report的编辑工作时,他很快就邀我为之写一个专栏,主题由我来定。我将该专栏命名为“Common Knowledge”(常识)。用Herb的话来说,该专栏预期为“对每一位职业C++程序员应该知道但未必知道的基础知识之定期概述”。然而,在以那样的风格写了一些专栏文章后,我对模板元编程(template metaprogramming)技术的兴趣日渐浓厚,故而此后“Common Knowledge”中讨论的一些主题距离“Common”越来越远。
然而,在C++程序设计界,当初促使我选定写这个专栏的问题仍然存在。在我的培训和咨询工作中,常常会遇到下面几类人员:
领域专家,他们是专家级的C程序员,但对C++只有一些基本的认知(并可能对 C++ 没有好感);
直接从大学雇来的新手,他们有才干,但对C++语言只有理论上的认识,缺乏实际产品开发经验;
专家级的Java程序员,他们仅有少量的C++经验,常会以Java的方式来从事C++ 编程;
C++程序员,他们具有若干年维护现有C++应用程序的经验,但尚未经受学习高级编程知识的挑战。
我希望能即刻进行建设性的工作,但是,许多我共事过的或培训过的人都需要先接受形形色色的关于C++语言特性、模式以及编程技术的预备性的教育,才有能力处理业务问题。更糟糕的是,我怀疑大多数C++代码在编写时都至少忽略了一些基本要素,因而不具备大多数C++专家所认可的产品级的质量。
这本书致力于解决这个具有普遍性的问题,它提供了每一位职业C++程序员需要知道的常识,并且这些常识都被精简至本质,因此可被高效而精确地吸收。其中有不少信息也可以从其他途径获得,而有些知识则是所有专家级C++程序员知道但未成文信息的完整摘要。本书优势在于,这些材料现在被集中于一处,并依据我多年的培训和咨询经验进行了遴选,经验表明,这些都是最常被误解同时也是最有用的语言特性、概念和技术。
也许构成本书的63个简短条款最重要的方面在于它们所省略掉的东西,而不是它们所包含的东西。许多主题都可以进行更复杂的讨论。如果忽略掉这些复杂性,会导致传达的信息不够充分,从而可能会误导读者,但对一个主题的全部复杂性进行专家级的讨论,又可能会使读者应接不暇。本书采取的方式是在讨论每一个主题时过滤掉那些“不必要”的复杂性。我希望有幸留下的这些东西是对产品级C++编程所必需的知识的清晰萃取。较真的C++语言专家可能意识到我没有讨论某些有趣的甚至重要的问题(从理论的角度来说),但我所省略的那些东西通常并不会影响阅读和编写产品级C++代码的能力。
写作这本书的另一个动机来自于我在一次会议上同一群知名C++专家的谈话。这些专家对于一件事情颇感沮丧,那就是他们认为现代C++是如此复杂,以至于“普通”程序员已经不再能够理解它了(比如,在模板和名字空间上下文中的名字绑定问题。是的,解决这样的问题确实需要普通C++程序员下更多的功夫)。在我看来,应该说其实我们的态度有些过于自负了,我们的沮丧也是不合情理的。我们这些“专家”们自己就不存在这样的问题,实际上,使用C++编程就像说一门(远比C++复杂的)自然语言那样容易,尽管我们不能完全分析我们所说的每一句话的语法结构。本书不断出现的一个主题是,虽然对特定语言特性细节的完整描述可能让人望而生畏,但是,日常使用的语言特性都是直观而自然的。
不妨考虑一下函数重载。有关它的完整描述占据了很大一块标准文档,并占据了许多C++教程的一整章(甚至多章)。然而,当我们面对如下代码时
void f( int );
void f( const char * );
//...
——马克·吐温
尽可能简单,但不过分简单。
——阿尔伯特·爱因斯坦
一个对读者的能力持怀疑态度的作家根本不能称其为作家,只不过是个阴谋家而已。
——E. B. 怀特
当Herb Sutter接手C++ Report的编辑工作时,他很快就邀我为之写一个专栏,主题由我来定。我将该专栏命名为“Common Knowledge”(常识)。用Herb的话来说,该专栏预期为“对每一位职业C++程序员应该知道但未必知道的基础知识之定期概述”。然而,在以那样的风格写了一些专栏文章后,我对模板元编程(template metaprogramming)技术的兴趣日渐浓厚,故而此后“Common Knowledge”中讨论的一些主题距离“Common”越来越远。
然而,在C++程序设计界,当初促使我选定写这个专栏的问题仍然存在。在我的培训和咨询工作中,常常会遇到下面几类人员:
领域专家,他们是专家级的C程序员,但对C++只有一些基本的认知(并可能对 C++ 没有好感);
直接从大学雇来的新手,他们有才干,但对C++语言只有理论上的认识,缺乏实际产品开发经验;
专家级的Java程序员,他们仅有少量的C++经验,常会以Java的方式来从事C++ 编程;
C++程序员,他们具有若干年维护现有C++应用程序的经验,但尚未经受学习高级编程知识的挑战。
我希望能即刻进行建设性的工作,但是,许多我共事过的或培训过的人都需要先接受形形色色的关于C++语言特性、模式以及编程技术的预备性的教育,才有能力处理业务问题。更糟糕的是,我怀疑大多数C++代码在编写时都至少忽略了一些基本要素,因而不具备大多数C++专家所认可的产品级的质量。
这本书致力于解决这个具有普遍性的问题,它提供了每一位职业C++程序员需要知道的常识,并且这些常识都被精简至本质,因此可被高效而精确地吸收。其中有不少信息也可以从其他途径获得,而有些知识则是所有专家级C++程序员知道但未成文信息的完整摘要。本书优势在于,这些材料现在被集中于一处,并依据我多年的培训和咨询经验进行了遴选,经验表明,这些都是最常被误解同时也是最有用的语言特性、概念和技术。
也许构成本书的63个简短条款最重要的方面在于它们所省略掉的东西,而不是它们所包含的东西。许多主题都可以进行更复杂的讨论。如果忽略掉这些复杂性,会导致传达的信息不够充分,从而可能会误导读者,但对一个主题的全部复杂性进行专家级的讨论,又可能会使读者应接不暇。本书采取的方式是在讨论每一个主题时过滤掉那些“不必要”的复杂性。我希望有幸留下的这些东西是对产品级C++编程所必需的知识的清晰萃取。较真的C++语言专家可能意识到我没有讨论某些有趣的甚至重要的问题(从理论的角度来说),但我所省略的那些东西通常并不会影响阅读和编写产品级C++代码的能力。
写作这本书的另一个动机来自于我在一次会议上同一群知名C++专家的谈话。这些专家对于一件事情颇感沮丧,那就是他们认为现代C++是如此复杂,以至于“普通”程序员已经不再能够理解它了(比如,在模板和名字空间上下文中的名字绑定问题。是的,解决这样的问题确实需要普通C++程序员下更多的功夫)。在我看来,应该说其实我们的态度有些过于自负了,我们的沮丧也是不合情理的。我们这些“专家”们自己就不存在这样的问题,实际上,使用C++编程就像说一门(远比C++复杂的)自然语言那样容易,尽管我们不能完全分析我们所说的每一句话的语法结构。本书不断出现的一个主题是,虽然对特定语言特性细节的完整描述可能让人望而生畏,但是,日常使用的语言特性都是直观而自然的。
不妨考虑一下函数重载。有关它的完整描述占据了很大一块标准文档,并占据了许多C++教程的一整章(甚至多章)。然而,当我们面对如下代码时
void f( int );
void f( const char * );
//...
【插图】
相关资源回到顶部↑
· 【推荐】众多高校学子口口相传,他们共同的选择--华清远见嵌入式学院(嵌入式Linux就业课程、3G手机开发就业课程,通过入学测试即签100%就业协议,4个月集中实训,世界500强企业成功就业保障!!!)· 【亚嵌教育 嵌入式培训专家】(嵌入式培训,嵌入式Linux培训,ARM培训,Linux培训,3G培训,Android培训,WINCE培训,DSP培训,FPGA培训,嵌入式就业培训)
· 程序员的7种武器(正则表达式、编程语言、数据库、算法、软件调试、开发环境)
· C/C++ 经典著作(《C专家编程》《C++ Templates中文版》《C和指针 》《C陷阱与缺陷》《C++沉思录》)
· 图灵公司详细书目








点击看大图





加载中...

