自学C++,几乎一大半人会说红宝书《C++ primer》,剩下的人中又有一大半会说《C++ 编程思想》
嗯,从我个人学习角度看,初学者特别是如果有C经验者,看《C++ primer》并不合适,说实话,我更愿意将它作为参考手册。
因为其特点就是举例丰富,论述详尽,内容厚实,看了后面忘了前面。真的太厚了,初学者往往淹没在其中,没办法抓住要点。
《C++编程思想》是分3卷,好像总共是两册。卷一不太清楚,先接触的是卷二,卷三(反正就是下册),卷二有点难,绝对不适合初学者。卷一接触的时候对C++已经比较了解了(看过Scott的三本经典著作2遍,更早的其他的一些启蒙书,较难的Modern C++ Design,还包括下面要讲的一些书),所以基本只是大概了解了一番,感觉和C++老大写的那本书比较接近,不过我看着C++老大写的那本书还比较好,内容不太多,有很多可以略过,但是对一些为什么不允许某个语法或者要创造这么个语法,等等之类的问题有很好的诠释。所以相对来说那本书,我也不太推荐。
如果纯粹是初学者,一点编程的经验也没有,那么我建议不要自学,还是先参加正式的课堂学习吧。
如果你有编程基础,比如是C(如果是其他的面向对象编程经验的,那就酌情略过),那么可以先找一本最薄的C++书看一遍,一般会涉及以下内容:
1. 函数重载和运算符重载 我想只要有程序概念的,对这种东西很好理解。(Ps,但实际不太好恰当的应用)
2. 一个带类的C,主要就是访问修饰符,public,private,protected。一看就明白。
3. 类的标准函数,构造函数,析构函数,拷贝构造函数和复制构造函数,主要是它们的作用和什么情况下需要自己写这些标准函数,这是一个难点,即使有其他面向对象语言经验的人,也往往会在这里卡一下。不过不妨暂时轻松走过好了,反正总有一天会重重摔在这里,重新审视这里的内容的,当然能那是你就又上一个档次了。
4. 接下来就是类的继承,首先是继承属性,public,private,protected,简单,就是名词解释。其次是单继承,也很简单,记住哪些数据可以继承,哪些函数可以继承,哪些函数不但可以继承而且可以重定义(这样的函数实际上应该叫接口)。做到这些就够了。
5. 最后,就是泛型编程了,模板。特点是句法复杂,名词特多。但是你只要能够认出怎样的代码是模板,通常标记是template<>,这样就够了,如果你能够区分实例化,特化,等等这些概念,那么说明你的理解力相当高,应该做自然科学比较好。
6. 此外,还有一些杂项,比如输入输出,只要会cout,cin,不需要会格式输出。文件输入输出也一样。名字空间的内容,实际跟类的有点相似,如果你对作用域的概念比较清楚的话,相信这些都是直接走个过场就可以马上理解了。
ok,在你了解上面的基础知识之后,(一般说来,不会超过21天)。如果还有不懂的,也不管了。接下来我要正式推荐一本书,薄薄的一本书《C++必知必会》。作者按条款列举了一些常见的内容,也是我们看完一边《C++primer》却完全没有印象的内容,而这些内容,恰恰是在C++编程中最经常用到的知识点,或者最常误解的内容。这本书有几个亮点:
1. 薄
2. 给出了C++查找机制,完整的。特别清楚,相信看完后说还不理解的,我只能拜倒。
3. 给出了模板的概念,他对模板几乎花了一半的篇幅,所以绝对详细,但不啰嗦。看完后,我相信你都有能力看《Modern C++ Design》
4. 给出了一些常见涉及模式,不是主要内容,初学可略过。
如果在阅读过程中有哪个不懂,这是可以参考红宝书,根据目录直接索引到具体内容,或者直接online search。
上面所讲的内容不涉及STL。如果需要学习STL,建议还是先学完数据结构,然后学完上面的C++基础,再开始看,随便找本书,但不要《STL源码剖析》,牛都没见过,就庖丁解牛,就有点不太切实际了。薄一点的书就行,或者直接参考手册。
学完基础篇,可以考虑Effective 三大本,有些内容过时了,但是大部分绝对还是真理。看过此书,对很多代码就会有知其所以然的觉悟了。剩下的我推荐C++老大写的那本书(不是参考手册的那本),编程思想第二卷,《C++编程规范》,有空的时候看看。不要急于写超过1000行的代码,多看一些源码,多写一些简短的只是用来测试学到的技术的代码段,这样就会不知不觉中提高。
最后再强调一次,初学不宜《c++ primer》,除非你是上课。想学基础,找薄的书+《C++必知必会》。进一步提高,多看C++编程思想方面的书,不要急于写大段的代码,基本都是错误,这与初学时不同,初学时还是建议多练练小程序。
个人观点。人各有志,求同存异。