昨天写了一篇怎样学好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年的时间,今天我还在随时温习)
    • C++ Primer》,这本0基础读本可能让会你啃得非常痛苦,全部的语言的特性和为什么都在里面了,好好读读。当然由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————

更新几个观点:

  • 1)我不擅长写书评,所以推荐的这些书可能会让你有点看点没有感觉,你能够上豆瓣或是China-pub上看看书评。
  • 2)C++有非常多奇淫技巧,有的非常BT,包含虚函数表,或许会有人认为有点没意思,但我认为非常有意思,一方面能够了解一门语言的实现细节,还有一方面能够开阔思路。我从学习这些知识中受益非常多。
  • 3)上述是我的个人的学习历程,我认为对我非常有效,所以是经验之谈。
  • 4)这类的文章在网上有非常多非常多,我不是第一个写这种文章,我也不是写得最好的,我并不希望用长篇大论来谈论什么。仅仅是想给大家了解一下大概的学习样子。毕竟,C++博大精深,不论什么一篇文章都无法说好。不如就简单一些。

(转载本站文章请注明作者和出处 酷 壳 – CoolShell.cn ,请勿用于不论什么商业用途)


怎样学好C++语言的更多相关文章

  1. (转)如何学好C语言,一个成功人士的心得!

    zidier111发表于 2013-1-26 08:59:05   今 天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德.香农和约翰.冯.诺依曼,是他们发现了所 ...

  2. 12天学好C语言——记录我的C语言学习之路(Day 12)

    12天学好C语言--记录我的C语言学习之路 Day 12: 进入最后一天的学习,用这样一个程序来综合考量指针和字符串的关系,写完这个程序,你对字符串和指针的理解应该就不错了. //输入一个字符串,内有 ...

  3. 12天学好C语言——记录我的C语言学习之路(Day 11)

    12天学好C语言--记录我的C语言学习之路 Day 11: 因为指针部分比较的难,所以我们花费的时间也是最长的,希望大家耐的住性子,多多理解,多多打代码.好了,废话不多说,来看第11天的学习. //编 ...

  4. 12天学好C语言——记录我的C语言学习之路(Day 10)

    12天学好C语言--记录我的C语言学习之路 Day 10: 接着昨天的指针部分学习,有这么一个题目: //还是四个学生,四门成绩,只要有学生一门功课没及格就输出这个学生的所有成绩 /*//progra ...

  5. 12天学好C语言——记录我的C语言学习之路(Day 9)

    12天学好C语言--记录我的C语言学习之路 Day 9: 函数部分告一段落,但是我们并不是把函数完全放下,因为函数无处不在,我们今后的程序仍然会大量运用到函数 //转入指针部分的学习,了解指针是什么 ...

  6. 12天学好C语言——记录我的C语言学习之路(Day 8)

    12天学好C语言--记录我的C语言学习之路 Day 8: 从今天开始,我们获得了C语言中很有力的一个工具,那就是函数.函数的魅力不仅于此,一个程序到最后都是由众多函数组成的,我们一定要用好函数,用熟练 ...

  7. 12天学好C语言——记录我的C语言学习之路(Day 7)

    12天学好C语言--记录我的C语言学习之路 Day 7: 昨天进行了一天的数组学习,今天大家可以先写几个昨天的程序热热身,回顾回顾,然后今天第一个新程序也是关于数组的,比较难,准备好就开始啦! //输 ...

  8. 12天学好C语言——记录我的C语言学习之路(Day 6)

    12天学好C语言--记录我的C语言学习之路 Day 6: 今天,我们要开始学习数组了. //①数组部分,数组的大小不能够动态定义.如下: //int n;   scanf("%d,& ...

  9. 12天学好C语言——记录我的C语言学习之路(Day 5)

    12天学好C语言--记录我的C语言学习之路 Day 5: 第五天的学习开始了,今天我们主要对几个程序进行编写,让自己充分的熟练编程语言,大量的题目会让自己变的精炼.以一个程序(program 5.1) ...

  10. 12天学好C语言——记录我的C语言学习之路(Day 4)

    12天学好C语言--记录我的C语言学习之路 Day 4: 首先来看一段程序: //输出下面4*5的矩阵 /* 1  2  3   4   5 2  4  6   8   10 3  6  9   12 ...

随机推荐

  1. 删除 Windows Azure 网站上的标准服务器头

    编辑人员注释: 本文章由 Windows Azure 网站团队的项目经理 Erez Benari 撰写. 请求和响应中包含的 HTTP 头是Web 服务器和浏览器之间的 HTTP 通信过程的一部分.例 ...

  2. IT第十八天 - 类的封装、继承、重载、上周总结★★★

    IT第十八天 上午 封装 1.关键字this,是表示该类在实例化时的对象,即this.表示为该对象的属性 2.类的数据保护,set.get方法的写法规则,为了之后的反射机制的读取数据,set方法中对于 ...

  3. java学习之反射

    package com.gh.ref; public class Person { private String name; private int age; private char sex; pr ...

  4. Friendship of Frog(水题)

    Friendship of Frog Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  5. easui tree载入时自动展开无子节点的节点

    利用loadFilter对后台返回的原始数据进行过滤处理,将数据中的state字段修改相应的值,若无子节点,则改成open,若有子节点,则改成closed. 由于一个node属性只有下面几项内容,因此 ...

  6. Servlet中通过过滤器实现统一的手动编码(解决中文乱码)

    1.web.xml片段: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi= ...

  7. 我的Python成长之路---第三天---Python基础(13)---2016年1月16日(雾霾)

    五.Python的常用的内置函数 Python为我们准备了大量的内置函数,如下图所示 这里我们只讨论红框内的内置函数 abs(x) 返回一个数的绝对值(模),参数可以是真说或浮点数 >>& ...

  8. cocos2d-x游戏开发系列教程-超级玛丽01-前言

    前言 上次用象棋演示了cocos2dx的基本用法,但是对cocos2dx并没有作深入的讨论,这次以超级马里奥的源代码为线索,我们一起来学习超级马里奥的实现,并以一些篇幅来详细讲述遇到的具体问题和具体的 ...

  9. Linux环境下编译并执行ava helloworld程序

    原文:http://blog.lupaworld.com/home-space-uid-24466-do-blog-id-2578.html 已经学会怎样在Windows下怎样编辑,编译和运行Java ...

  10. 问题在哪?动态菜单条-------Day86

    今天做了一个动态菜单条,先上图片,简单说一下我想实现的效果: 就是以下这个地方,随着鼠标指到哪,它就划到哪,并有一个惯性的幅度,并且滑动距离越远,停住的时候惯性越大,摆动幅度越大,这就是我大概想实现的 ...