如何学好C++语言

转自:http://coolshell.cn/articles/4119.htmlhtml

昨天写了一篇如何学好C语言,就有人回复问我如何学好C++,因此,我把我我的的一些学习经验写在这里,但愿对你们有用。首先,由于如何学好C语言中谈到了算法和系统,因此这里就只谈C++语言。c++

  • C++是最难的语言。这个世界上最难的编程语言可能非C++莫属了。你千万不要觉得几天就能够学好C++,C++的学习曲线是至关BT的,你能够看看这篇文章。C++是一门很自由的语言,自由到了有点BT和恐怖的地步。我甚至认为C++并非一门成熟的编程语言,由于太容易犯错了。因此,你必定要在一开始就要有很当心谨慎的态度,并把C++当成一种难以训服的猛兽来看待
  • 多问“为何要这样”的问题。学习C++必定要多问几个“为何是这样”,“凭什么要这样”的问题。好比:不少人知道C++有拷贝构造函数和初始化列表,但你真的知道为何要有拷贝构造函数?为何要有初始化列表吗?为何要有template,为何要有RTTI,为何不是别的呢?难道就是为了让一门语言变得Cool一些吗?彻底不是这样的,C++中的任何一个feature都有些实实在在的缘由,你必定要去了解为何要把C++设计成这样的缘由,你才能学好C++。有空看看《C++演化和设计》一书。

 

  • 看书,大量的C++书。你能够按以下前后顺序阅读(下面这些书,我花了大约4-5年的时间,今天我还在随时温习)
    • C++ Primer》,这本初级读本可能让会你啃得很痛苦,全部的语言的特性和为何都在里面了,好好读读。固然由C++之父写的《C++程序设计语言》也不错。两本看一本就行了(我看的是前者)。
    • 了解C++的语法仅仅是万里长征的第一步,你还须要看看《Effective C++》和《More Effective C++》这两本书并不厚,但我从02年就一直看到如今,每次读我都有新的体会,这两本书太经典了。若是你对C语言不熟,这两本书会让你回去补C语言的课。
    • Think in C++一样是另外一本经典之极的书,学c++必读,可是中文版的翻译的很很差,因此仍是去读英文版的吧。
    • C++沉思录》一样很是值得一读,这里教的不是编程,而是思考的方法,这是至关珍贵的。
    • Exceptional C++》和《More Exceptional C++》让你看看各类问题的解决方法和一些常见的经典错误。
    • Advanced C++》和《Modern C++》可让你知道C++各类神奇的用法。
    • 泛型编程与STL》是把C++实践到了极致的东西。很强大。STL——神同样的模板库(容器,算法和函数对象),不得不服。
    • 深刻探索C++对象模型》让你了解编译器下的C++是什么样的,让你了解C++的性能并不差。这个对于C++的程序员太关键了。我之前写过的《C++虚函数表解析》还有《C++对象内存布局》属于这个范畴。
  • 和Java语言作对比。我我的觉得Java对C++这个并不成熟的语言作了不少调整,规范和限制。因此,对比一下Java和C++,想想,为何一些东西在C++中能够作,但在Java中却不行。好比:Java的异常是必须要catch的,否则就会编译不经过。为何Java不提供操做符重载?为何Java会引入接口来作多重继承?为何Java没有像C++那样的I/O字符流?为何Java不支持指针?为何Java能够作到垃圾回收?等等。Java体现着不少面向对象设计的东西,学习Java有助于你学会怎么更好地使用C++来编程
  • 面向对象设计 。虽然面向对象多是个骗局。可是我以为面向对象设计中的一些实践很是的不错,好比,单一原则,依赖倒置原则,等等,都很是地经典。《设计模式》必需一读,《面向对象的分析和设计》能够一读。但不能够设计模式为中心来编程,而应该是用设计模式来解藕
  • 类库学习。看看MFC是怎么封装Windows API的,看看ACE是怎么面向对象的,看看boost是怎么玩面向对象的,看看CPPUnit又是怎么设计的。固然,Java的JDK中有太多的设计模式,能够参考。

但愿没有吓到你们,并欢迎你们补充。程序员

—————更新 2011/03/30 19:20————算法

更新几个观点:shell

  • 1)我不擅长写书评,因此推荐的这些书可能会让你有点看点没有感受,你能够上豆瓣或是China-pub上看看书评。
  • 2)C++有不少奇淫技巧,有的很BT,包括虚函数表,也许会有人以为有点没意思,但我以为颇有意思,一方面能够了解一门语言的实现细节,另外一方面能够开阔思路。我从学习这些知识中受益不少。
  • 3)上述是个人我的的学习历程,我以为对我颇有效,因此是经验之谈。
  • 4)这类的文章在网上有不少不少,我不是第一个写这样的文章,我也不是写得最好的,我并不但愿用长篇大论来谈论什么。只是想给你们了解一下大概的学习样子。毕竟,C++博大精深,任何一篇文章都没法说好。不如就简单一些。
相关文章
相关标签/搜索