摘要:本文介绍了在有c 语言基础的前提下,如何选择性地阅读 c++ in depth 系列的书籍。指出了哪本书的哪一章是值得一读的。
c++入门必备系列:
The.C++.Programming.Language.Special.Edition( 3th edition)
Publisher: Addison-Wesley Professional; 3 edition (February 11, 2000)
by Bjarne Stroustrup
Hardcover: 1030 pages
ISBN-10: 0201700735
这本书是“必备的”,也就是说,有就行了。装点门面非常合适。开口必谈本杰明,能显著地提升你的品味。
全书五部分:
0、简介
1、基本功
2、抽象机制
3、标准库
4、c++设计
作为初学者,你马马虎虎读读 2 抽象机制 部分第十章 Classes,照猫画虎地把你的c程序外面套一个class。哈哈,你可以出去吹牛了:我学会 C++了!你甚至会激动地畅想你也可以像Bjarne Stroustrup 一样写本书,书的名字叫做 《2小时入门c++》。
千万不要把这本书一口气读完。我觉得,不可能。
Effective C++
by Scott Meyers
Paperback: 288 pages
Publisher: Addison-Wesley Professional; 2 edition (September 2, 1997)
Language: English
ISBN-10: 0201924889
市场是检验书籍质量的唯一标准,288 页的厚度,50条编程箴言。把“你应该这么做”的道理娓娓向你道来。
这是一本最好的从c向c++过渡的书。面试官也最喜欢从这里面抽题。比如:const 和 #define 有什么渊源?“Item 1: Prefer const and inline to #define.” ;或者:为什么要声明虚的析构函数“Item 14: Make sure base classes have virtual destructors. ”
读这本书时,你会感觉到:Scott Meyers 怎么这么烦?是的,这本书里介绍的都是规范性的,即使你不 const、不 virtual、不 delete(),你的程序跑起来似乎也没什么问题。
有些耐心吧,“根红苗正”是很重要的。再说,难得有 Scott Meyers 如此耐心的老师,人家讲课,那家伙可真是“晓之以理”啊。
每天晚上一个小时,两个星期就搞定了。
C++ Primer, Fourth Edition
By Stanley B. Lippman, Josée Lajoie, Barbara E. Moo
Pages: 912
Publisher: Addison Wesley Professional February 14, 2005
ISBN: 0-201-72148-1
哈哈!c++真是个好东东。你看
string hishome = "挥汗如雨";
string myhomework = hishomework;
哈哈,老师还以为我的家庭作业也是“挥汗如雨”地 strcpy()的呢,他不知道我有神奇的 string 呢。string 真比 char* 省心多了。
屡试不爽。传说中的“完全兼容”?
可是,可是……
string myhomework="砍头去尾";
char* hishomework = myhomework;
老师(编译器)检查出问题来了。咋回事捏?有内鬼?
这可不是内鬼,这叫“潜规则”。
要知道这些潜规则,就得找 c++ prime了。
Lippman 手把手地告诉你这些标准库应该怎么用。
Part II: Containers and Algorithms 容器和算法, 详细地介绍了 标准库的每个函数的用法。
不过,一个比这更好的资源是:http://www.cppreferance.com/ 同样是介绍标准库的函数用法的。但是要简明多了。适合快餐式的学习。
所以,C++ Primer,也是鸡肋。
中阶:
think in c++
Paperback: 1224 pages
Publisher: Sams; 5 edition (November 25, 2004)
ISBN-10: 0672326973
虚函数究竟是个什么东东?const 究竟起了什么作用?临时对象是怎样产生的?
think in c++ 是我觉得c++最好的书。“侠”“菜”咸宜。既然是中阶,那前六章的内容就不需要看了。
8 constants 讲了 const 约束的对象、 指针、类成员、函数参数和返回值,以及临时变量的 const 属性。在c 中,const的作用弱到可以忽略,但在c++中,对 const 的漠视,会让你的程序编译过程成为一部苦难史。
其它的,对 virtual function 的汇编语言描述,对 inline函数栈分配情况的详解。这种深度是其它的书籍没有达到的。
其实如果读了这本书,c++ program language 就真不需要看了。
Inside the C++ Object Model
By Stanley B. Lippman
Pages : 304
Publisher : Addison Wesley May 03, 1996
ISBN : 0-201-83454-5
问:c++比c 多了什么东东?
答:两个加号。
问:为什么多了两个加号?
答:因为c++比多了两个东东:一是 this指针,二是虚表。
问:一个对象有多大?
答1:数据成员大小之各。
答2:还得考虑字节对齐。
答3:若有虚函数,还得加上虚表指针的大小。
以上知识,你在其它书中就获得了。但是
问:一个没有数据成员的对象有多大?
你知道吗?
只有这本书能给你答案。
这是书所有话题围绕“效率”和“空间”展开。古有“锱铢必较”,这本书是“byte必较”。
这本书探究了c++ 语言模型。说实话:相当晦涩。即使侯先生的中译本,也不易读明白。不过如果你想充分融合 c 的高效性和 c++的可移植性,你应该读读他。对象究竟有多大,虚函数在多大程度上影响了效率。临时对象会让你的程序有多慢。 编译器给你的构造函数和向下转型安插了哪些代码,try...catch()效率如何……
这本书中有一些内容过于执着。对于我们“吃快餐”的人来说,不必在一节环节投入过多的业务。比如,多重继承,虚继承。模板技术出现后,这些技术已经不被推荐使用了。所以,不要去研究它们。但是,有一节你必须去看,4.2 的第一部分。
more effective c++
Paperback: 336 pages
Publisher: Addison-Wesley Professional (January 8, 1996)
ISBN-10: 020163371X
千万不要以为 more effective c++ 就是比 c++ prime more 了一点儿。 effective c++ 是编程习惯, more effective c++ 是设计技法。virtual ctors、smart pointers、reference counting、proxy classes,double dispatching。这本书生动地讲述了这些设计模式的应用。侯捷先生对这本书的喜爱溢于言表:“是一本好书,若不是有人发现,它就被埋没了,这个发现的人就是我。”
书很薄,作者分门别地讲,专门方便我们“快餐一族”的,就不用“划重点”了。
高阶:泛型编程
泛型编程说起来简单:迭代而已。但真正学起来真不容易,原因之一就是:层层迭代迷乱了我们的双眼,我们看不到真实的代码实现。
Modern C++ Design
唉,07年的时候,我找遍全中国。终是没找到这本书有卖的,满心遗憾。
终究还能借到,也算幸运。