这本书是我在大二的那个暑假和大三第一个学期时候看的。现在回想起来,这本书看的时间真是长啊。当然这么长是有原因的,这本书有一个特点,每一章都有一些简单的课后题目。题目都是非常简单的,不过真的完成每一个题目需要的代码两也是非常大的。看着本书之前只是上课学过C语言和稍微了解了下80X86汇编。基础非常差,不过还好这本书就是对这样的人写的。我读这本书并不是把他当作普通的书来读的,我对它有一种盲目的崇拜感。因为同学,老师和网络上我认为的牛人都极力推荐这本书。直接的后果就是这本书看的旷日持久。对于课后的每一道题目都不敢有丝毫的懈怠,害怕不做这些题目下一章我就看不懂了。现在想起来让我自己都不敢相信,我竟然真的坚持把这本书看完了。并且敲完了大部分的课后题目需要写的代码。
现在看来这本书的块头也就一般般,不过当时已经算是我看过最厚的书了(小说除外),没有之一。C++是一门非常复杂的语言,它的复杂度体现在,它并不会因为你对语言的深入而减少,反而会越来越觉得复杂。写到这里让我想起了一件事情。我刚看完前面几章的时候有一个同学问我:“C++是怎么样的?”我说:“大部分和C差不多,就是多了个class。”我那时候的理解就是C++ == C with class。随着学习的深入我看到了函数的重载,C++对函数的重命名,模板,继承,多态等等。我发现C++太复杂了,虽然我看完书上的概念和例子,能够自己独立完成课后的练习,并且能对同学吹牛说我精通C++,但是在我的内心深处我知道我只是在C++的汪洋大海的海滩上捡贝壳的小孩子,只是隐隐约约听到大海那雄伟博大的海浪声。
言归正传,我非常清楚的记得这本书封底上写着这样一行话:这本书带领你跨越最危险的沼泽。现在想想这句话相对于这本书是言过其实的。这本书并没有带领我跨越最危险的沼泽,它让我知道了沼泽是怎么样的。只是我比较幸运我活着走出了这片沼泽。
大部分说这本书适合初学者我想是因为书一开始是先讲解C语言。C语言的函数,C语言的变量类型,指针等等。然后才讲C++中的函数,C++中的变量,C++中的指针。这是何苦呢?C++就是C语言的超集啊。把C,C++分开讲让人觉得啰嗦,烦躁。一般人我觉得看到这里就看不下去了,除非明智得跳过C的那一部分。C函数定义,C变量类型不就是和C++一样的吗?为什么要分开来讲,直接可以说C++的语法就是这样的,和C有一些类似而已。并且可以在书的附加阅读中介绍一下C和C++的历史渊源。把C++和C当作两种完全不同的语言可以更好的学习C++,更适合初学者。我们学习C#的时候并不会先讲解下C++中类定义的方式,然后讲C#中类的定义方式。C#就是C#,虽然和C++,Java从语法上来讲有一定的渊源,但是学习它的时候并不需要先介绍这两中语言的语法吧。这是不足一。
这本书还有一个特点,详细。详细到令人发指。记得我刚开始用cout和cin的时候心里非常畅快,因为不再需要一大堆“”和%这些乱七八糟的符号,只需要<<和>>,看上去代码美观优雅多了。不过悲剧就发生了,随着cin和cout一大堆格式化的东西就来了。我开始无限怀念“”和%,scanf和printf。直到现在我用MFC中CString类的Format成员函数还一阵窃喜,高兴自己有这么方便的函数可以使用。可见对我心灵的伤害是多么得大。我知道学习C++,尤其是想系统的学习C++的人,这方面的东西肯定是要了解的,但是我希望不要在号称写给初学者的书上如此详细得讲解这个。这是不足二。
这本书对于编译器底层实现稍微介绍了一些。比如C++编译器是如何实现虚函数,多态和动态绑定的实现原理等。由于我之前学习汇编,对指针的工作方式也非常熟悉所以这倒是帮助了我学习一般人认为C++难度最大的部分。不过对于只学过C直接学习C++或者用这本书学习C++并作第一门计算机语言的人来说可能有点困难。这是不足二点五(也不完全算是不足)。
我给这本书的评价是四星,虽然有我上面说的那些缺点,虽然有那么一点点不适合初学者。但是仍然不能阻止它成为计算机领域一部伟大的书籍。书中对于类的关系,类的继承,重载和多态等重要的C++语法讲解的非常透彻,如果精读本书可以对C++有更深的了解。书中每一个语法点都配有非常精妙的例子代码,每一章的例子都是环环相扣,循序渐进,有时候可以不看一节的文字,单单看一个代码和运行结果就能理解这一节的语法点。可以看出,作者对于例子代码是经过仔细的编排和严格的测试的。
书中所用表达方式和程序的风格让人的让人感觉到作者的踏实。和C++语言界朝着沉醉于奇淫技巧的方向发展。C++社区的日渐松散。作者给C++带来了朴实的春风,让人感觉清爽。书中的涵盖了C++大部分知识点,并且严格符合C++的标准。计算没有详细讲解的知识,也列出了参考书目和概念。我想这本书应该是那种要让人不停复习,不停翻看的书。
就像这篇文章的题目,我希望我不是从这本书开始学习C++的。我希望有一本书能带我入门,它讲的知识点少一点,粗略一点,浅显一点,例子代码能短一点。如果这样的话,等到我看这本著作的时候能少一份盲目的崇拜,多一份对C++的和作者的尊敬。