昨天写了一篇怎样学好C语言,就有人回复问我怎样学好C++,所以,我把我个人的一些学习经验写在这里,希望对大家实用。首先,由于怎样学好C语言中谈到了算法和系统,所以这里就仅仅谈C++语言。
- C++是最难的语言。这个世界上最难的编程语言可能非C++莫属了。你千万不要以为几天就能够学好C++,C++的学习曲线是相当BT的,你能够看看这篇文章。C++是一门非常自由的语言,自由到了有点BT和恐怖的地步。我甚至认为C++并非一门成熟的编程语言,由于太easy犯错了。所以,你一定要在一開始就要有非常小心慎重的态度,并把C++当成一种难以训服的猛兽来看待。
- 多问“为什么要这样”的问题。学习C++一定要多问几个“为什么是这样”,“凭什么要这样”的问题。比方:非常多人知道C++有拷贝构造函数和初始化列表,但你真的知道为什么要有拷贝构造函数?为什么要有初始化列表吗?为什么要有template,为什么要有RTTI,为什么不是别的呢?难道就是为了让一门语言变得Cool一些吗?全然不是这种,C++中的不论什么一个feature都有些实实在在的原因,你一定要去了解为什么要把C++设计成这种原因,你才干学好C++。有空看看《C++演化和设计》一书。
- 看书,大量的C++书。你能够按例如以下先后顺序阅读(以下这些书,我花了大约4-5年的时间,今天我还在随时温习)
- 和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————
更新几个观点:
- 1)我不擅长写书评,所以推荐的这些书可能会让你有点看点没有感觉,你能够上豆瓣或是China-pub上看看书评。
- 2)C++有非常多奇淫技巧,有的非常BT,包含虚函数表,或许会有人认为有点没意思,但我认为非常有意思,一方面能够了解一门语言的实现细节,还有一方面能够开阔思路。我从学习这些知识中受益非常多。
- 3)上述是我的个人的学习历程,我认为对我非常有效,所以是经验之谈。
- 4)这类的文章在网上有非常多非常多,我不是第一个写这种文章,我也不是写得最好的,我并不希望用长篇大论来谈论什么。仅仅是想给大家了解一下大概的学习样子。毕竟,C++博大精深,不论什么一篇文章都无法说好。不如就简单一些。