当前位置:首页 > 考级

你打算学习C++了? 建议先做完这几步才动手

小侄子打电话找我,说现在放寒假了,想在假期把C++学起来。

我说可以啊.我小侄子今年考上了国内某211大学,学的计算机专业,国内排名A-,也算很不错了.

听到他说#优质作者榜#C++这三个字,(算3个字吧?)我立刻就有一种莫名的敬畏之情从身体里由内向外的迸发.

C++这门语言,是每一个从事计算机领域的人都应该学习的语言.

即使你是半路入行,甚至只是在培训班里学个java或者前端出来的,都应该了解下,学习下C++.说它是计算机从业人员的精神内核和思考方式都不为过。

与计算机沾边的,无论软件,嵌入式,还是通信,运维,只要大的领域是计算机这个圈子的,一点都不了解C,不学习点C++,我认为都是不完整,有缺憾的.

这里就不展开解释为什么这样说了,回到本文的主题

小伙子说打算学一学C++,问问我有什么建议,因为在网上看了一圈,感觉C++让人望而生畏,似乎都不是一般人能学好的似的.特别有一个段子在网上流产的很广:

开始学C++了,

1个月:都说C++难,但聪明如我,一个月就读完了C++ primer,我看这C++也不过如此.

3个月:原来之前一直在用C++语法写C...开始正式学习C++...

1年:今天花一下午一定要琢磨明白这段代码啥意思...

2年: C++太他妈难了,发明C++的可以吃X去了

3年:这辈子绝对不能继续搞C++了,珍惜生命,远离C++

4年: ......

5年:终于神功初成,大家好,我是C++专家,疑难杂症请问我

7年:我比较擅长XXX这块,其他方面我是外行

10年:我有一定的C++基础...”

敢自称精通C++的人恐怕只会被视为小白。因为只有菜鸟的简历上会这样写,敢这样写。

他说他看完了之后,脊背一阵发凉,还没开始学,就想放弃了.我听完,哈哈大笑.

C++整体来讲,博大精深,但好学难学,只是相对而言

.C++虽然博大精深,但是无论你多么努力的去学,在实际工作中大部分人顶多只能用到所学的20%.

所以,根本不用畏惧.而且C++之所以难学,是因为C++体系太大,方向太多,知识量太杂.但是,但是,你学习C++,一定要有一个清晰的认识,你不需要,也不可能把所有的方向都学完.

实际上基础部分的学习是完全没问题的,至于提高部分,一定要看你的需要和定位去学,否则你学了很久,回过头来看,也是事倍功半.

那么C++到底该怎么学呢?网上这方面的资料汗牛充栋,多如牛毛.我来谈谈个人的一些想法.

首先,学习C++,到底要不要先学习C语言?

这是一个永恒的话题,绕也绕不过去,虽然很多人说,智者见智仁者见仁,但我是坚定的要说,只有学过C语言,再学C++时,才能发现C的美,和C++的美!才能有一个完整的”编程语言人格”.(大家如果不同意,可以在下面留言怼我,尽情开怼)

C和C++既很相似,又是完全不同的两门语言(特别是Modern C++).

在学C++之前,如果能把C语言好好的学一遍,最起码学到函数指针,文件操作(结构体在这之前肯定也是学了),常用的库函数,甚至系统自带的API也用了一些.

在这种情况下,再来学C++时候,至少能解决一个问题,就是不用从零起步,而且因为学了C,再学C++,会发现C的语法可以适用于C++,但是在C++里又有更好的解决办法.最简单的来说,printf和scanf变成了更好用的cin和cout,int*不如int&更好,等等.会加快和提高C++基础语法的学习速度和学习质量,对比的学习方式,是最好的学习方式.

其次,在学习C++之前,我建议先把数据结构和算法的基础部分先学一下,这是我多次辅导学生时的经验之谈.

因为学完了C之后,基础的数据结构,比如数组、链表、队列、栈、树、二叉树、简单的图等,以及一些基础的排序和查找算法,学一学后,再来学C++的时候,遇到一些难的知识点的时候,就更有信心和底气,不至于像现在很多初学者,连最基础的一些STL使用,都是一脸懵逼的,打退堂鼓是必然的,就感觉C++难,方法不对,学习路径不对,努力白费。

为什么vector不叫高级数组,非要叫向量?一个数据类型,其实就是一个数据结构,围绕这个数据结构,一定有一些最基础、最常用、最重要的函数来对其进行操作。学过数据结构(基础的)后,再学C++会更好,

如果你是抱着想认认真真的学好C++的想法,我建议你这样做。不要上来就干C++,也不要听别人说的,初学者学C语言,学习曲线陡峭。C语言根本没你们想的那么难,初学者从基础语法慢慢学起,完全可以。

你寒窗十二年,那么惨烈的高考都搞定了,学点基础的C语言,绝对是小case,然后再学点基础的数据结构和常用算法,然后再开始学习C++,就感觉根本没那么难了。

另外,在学习C++之前,我建议你一定要看一本书。(在学习其他面向对象的语言之前,都值的一看。而且不是推荐好书的,就一定是卖书的!)

这本书引入国内的时候(2002年?还是2003年?记不清楚了),我就买了,并且做了大量的笔记,专门用来普及面向对象的思维方式的。这本书的名字是《面向对象的思考过程》,目前好像已经是第五版了,(是的,引入国内已经二十多年了)在微信阅读,QQ阅读上好像都可以免费看,也可以从网上下载电子书,不过我推荐你们最好买一本,真的很棒。

一定要先看看这本书,虽然用的java语法,但一点也不影响阅读(我从未用过java),看完这本书,你就能很轻松的理解面向对象的本真,一切皆是对象,比如鸟儿如果是一个对象,那么就一定具备它自身的一些特征,比如有翅膀,也一定有一些术语它独特的行为,比如飞翔.通过这本书深入浅出的讲述,会很快具备一些面向对象的思维,理解对象其实的本质就是不同程度对事物的抽象,理解什么是封装,多态,继承.然后再来学习如何在代码层面来实现这种解决问题的表述.

说到C++本身,我建议不要把它仅仅理解为一门编程语言,实际上它是多种思维方式的综合体.

在解决一个问题时,既可以用面向过程的方式去解决,也可以用基于对象的方式去解决,也可以用面向对象的方式去解决,也可以用泛型的思维方式去解决,也可以用函数式思维的方式去解决,无论用哪种思维方式去解决,C++都可以实现。正因为它灵活强大,知识点太多,所以感觉难学。

浅层次上,它试图用更好的方式来优化实现C的功能,时候就可以学一些基础语法.然后接着就可以学一些面向对象的语法,如果你之前已经看过了《面向对象的思考过程》这本书,这时候就可以更聚焦于语法的使用,和C++如何来实现面向对象的设计。这2块熟悉之后,就可以比较重点的来学习STL了。所谓泛型,就是不断的对代码抽象,让你的算法能更普遍性的应用于更多的数据类型,适应更多的场景。泛型,就是广泛,通用的类型的意思,是一种和面向对象不同的思维方式,又能融合在一起共同解决问题。

至于函数式思维和编程,又是更高维度的事了。这里的函数,并不仅仅是语法层面的“函数”,而是一种思维方式,有深厚的底层数学逻辑,这种思维方式甚至比面向对象和泛型出现的更早,甚至比编程语言本身诞生的更早。这些都是后话了。

你只有了解了这些,去学C++时,才不会陷入复杂多变的语法泥潭。

当然,我今天写的这些,只是抛砖引玉,限于篇幅,也不可能说的太多,如果你在学习C++的过程中,有任何困惑,都欢迎随时交流,也希望你能关注我的其它文章。

段誉,于合肥。

本文来自网络,不代表教育资讯立场,转载请注明出处。