如何学好C++

作者:陈皓

出处:http://goo.gl/43XkL

昨天写了一篇如何学好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————

更新几个观点:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/242993.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单边谱 → 双边谱

今天群里朋友问到一个问题:这个处理是啥意思? 记录一下。 思路: x为原信号,y为处理后的信号。其中大写为频域信号,小写为时域信号。 考虑到余弦对应的傅里叶变换,以及正弦对应的傅里叶变换,可以…

音频变调技术

今天看到群里有人讨论这个问题,记录一下。 主要内容转自:http://www.cnblogs.com/welen/p/3782896.html 变调和变速原理 自然语音的产生可以简化为图2-1模型,激励源出来的声门波信号与声道模型进行卷积,最后通过嘴唇辐射模型产生语…

图像处理一些常用的网站

一、研究群体 http://www-2.cs.cmu.edu/~cil/vision.html 这是卡奈基梅隆大学的计算机视觉研究组的主页,上面提供很全的资料,从发表文章的下载到演示程序、测试图像、常用链接、相关软硬件,甚至还有一个搜索引擎。 http://www.cmis.csiro.au…

SystemVerilog笔记

SystemVerilog笔记 使用($isunknown)操作符,可以在表达式的任意位出现X或Z时返回1。$size函数返回数组的宽度关联数组switch,以实现从字符串到数字的映射。函数exists()来检查元素是否存在。方法unique返回的是在数组中具有唯一值…

收入和贷款有什么关系?

说到贷款,收入是至关重要的一环,收入在贷款审核过程中有着举足轻重的作用。那么具体来说,贷款到底和收入有什么关系呢?贷款审核考察借款人的收入目的是为了核实借款人的偿还能力,因此贷款机构不仅要考核借款人的收入&a…

银行系普惠和小贷系普惠,哪个贷款更靠谱?

2017年5月26日银监会发布了《大中型商业银行设立普惠金融事业部实施方案》,《实施方案》明确了大中型商业银行设立普惠金融事业部的总体目标,通过建立适应普惠金融服务需要的事业部管理体制,构建科学的治理机制和组织架构,健全专业…

并串 转换

并串 转换 题目描述 设计一个模块进行并串转换,要求每四位d输为转到一位dout输出,输出valid_in表示此时的输入有效 输入描述: clk为时钟 rst为低电平复位 d 信号输入 输出描述: dout 信号输出 valid_in 表示输入有效 题目解读 串并转换操作是非常灵活的操作,核心思想就…

H.264码流解析 一个SPS的nalu及获取视频的分辨率

00 00 00 01 67 42 00 28 E9 00 A0 0B 77 FE 00 02 00 03 C4 80 00 00 03 00 80 00 00 1A 4D 88 10 94 00 00 00 01 00 00 00 01为NALu头,‍其余码流由十六进制转为二进制 67 0110 0111 42 0100 0010 00 0000 0000 28 0010 1000 E9 1110 1001 00 0000 0000 A…

小额贷款利息违法吗?

我们经常听到很多朋友说,小额贷款利息高,认为小额贷款的利息是高利贷,不合法。那到底小额贷款算不算高利贷呢,是不是合法的呢?在解释这个问题之前,我们先来看下国家法律对合法利息的定义。《最高人民法院关…

什么样的征信才算是好的?

有过贷款的朋友都知道征信报告对贷款有很大的影响,有时候贷款的前期工作都准备好了,突然发现征信有问题,结果贷款就黄了。可见征信报告对贷款的作用还是很大的,贷款机构之所以会看重征信记录,因为它是一个人过去信用的…

时钟 切换

时钟 切换 题目描述 存在两个同步的倍频时钟clk0 clk1,已知clk0是clk1的二倍频,现在要设计一个切换电路,sel选择时候进行切换,要求没有毛刺。 信号示意图 题目解读 通过在每个时钟源的选择路径中插入一个负边沿触发的D触发器,可以确保时钟在高电平时,输出保持不变。 通…

比较OpenBLAS,Intel MKL和Eigen的矩阵相乘性能

http://www.leexiang.com/the-performance-of-matrix-multiplication-among-openblas-intel-mkl-and-eigen 分布式机器学习 signa http://www.comp.nus.edu.sg/~dbsystem/singa/install/2015/01/20/install/

动态时间规整-DTW算法

作者:桂。 时间:2017-05-31 16:17:29 链接:http://www.cnblogs.com/xingshansi/p/6924911.html 前言 动态时间规整(Dynamic Time Warping,DTW)是孤立词识别的早期技术,梳理一下,主…

到底逾期几次才会影响贷款申请?

大家都知道,申请贷款时,贷款机构会重点考察借款人的征信记录,那么,评估标准是什么呢?到底逾期几次才会影响到贷款的申请?在信贷行业,对逾期标准的评判一般是按“连三累六”的原则,简…

状态机与时钟分频

状态机与时钟分频 题目描述 使用状态机实现时钟分频,要求对时钟进行四分频,占空比为0.25 信号示意图 题目解读 首先考虑输入输出,作为分频电路,有一个时钟输入端,clk,输出端div3,再加一个复位端(这里不加也可)所以输入 clk,rst输出 clk_out再考虑状态转换的问题。4分…

candence 16.6 win8.1 x64 破解

测试机系统截图: 破解说明具体的步骤: 1、安装licensemanager,问license时,单击cancel,然后finish. 2、接下来安装cadence的product,即第二项,直到结束. 2.1 安装cadence16.6最新补丁Hotfix_SPB16.60.003_wint_1of1.ex…

常用有话帧检测技术(VAD)

作者:桂。 时间:2017-05-31 17:43:22 链接:http://www.cnblogs.com/xingshansi/p/6925355.html 前言 总结一下基本的有话帧检测(Voice activity detection, VAD)技术,基于神经网络的待后面梳理完神经网络…

矢量量化(VQ)

作者:桂。 时间:2017-05-31 21:14:56 链接:http://www.cnblogs.com/xingshansi/p/6925955.html 前言 VQ(Vector Quantization)是一个常用的压缩技术,本文主要回顾: 1)VQ原理 2&am…

超前进位加法器

超前进位加法器 题目描述 求两个四位的数据编写一个四位的超前进位加法器,建议使用子模块 提示:超前进位加法器的位公式如下 这里‘+’ ‘’符号不是‘加’和‘乘’,是‘或’和 ‘与’ 题目解析 题目要求 4级可以表示为如下,这里P和G是传播信号和生成信号: `timesc…

Python3.x和Python2.x的区别

这个星期开始学习Python了,因为看的书都是基于Python2.x,而且我安装的是Python3.1,所以书上写的地方好多都不适用于Python3.1,特意在Google上search了一下3.x和2.x的区别。特此在自己的空间中记录一下,以备以后查找方便…