45天,学会C++ | 原创
在看点击上方蓝色“后端技术学堂”关注后加个“星标”
最新文章不错过
阅读本文大概需要 10 分钟
为什么要限定45天?这不寒假马上要开始了,对于学生党或许是一个弯道超车的好机会,不是学生党想转行学习C++看完这篇也能让你找到学习方向。
关注我比较早的读者应该知道,我的工作是 C++ 后台开发软件工程师,目前在鹅厂做后台开发工作,学习 C++ 这些年,有一些经验可以和你分享。
一般来说学习C++要以年为单位,因为C++更加接近系统底层,相比其他编程语言确实难学一些,短时间很难学好并掌握精髓,需要比较系统的学习,速成不了。
以年为单位的学习周期,那是奔着熟练掌握的目标去的,换作当年的自己也没能在45天内入门C++,那时缺乏有效的学习规划和正确的方法,埋头就开始看书敲代码了,殊不知磨刀不误砍柴工,吸取前辈经验。
规划好正确的学习路线,短时间入门C++可行性还是很高,并且能快速得到正向反馈,后面深入学习起来干劲更足。
不整虚的,就以寒假45天学习计划为例,来给C++新手规划一个可执行的「短时间自学入门C++」学习路线。
要学什么
知己知彼百战不殆。
开始学习之前,应该对学习内容有大概的了解,这就像你拿到一本大部头的图书,不要埋头从头翻到尾,先从「目录」了解下整本书的内容,心中有数,C++的学习目录是这样的:
- 面向对象的特性,封装、继承、多态
- 堆和栈的区别,mallocl和new的区别
- 虚函数、虚函数表,对象内存布局
- 重载Overloading和覆盖Overriding
- 引用与多态的关系
- 派生类中构造函数与析构函数,调用顺序
- 析构函数、构造函数
- 模板类,泛型
- 结构体内存对齐方式
- 指针和引用
- static关键字作用
- 虚表,基类的虚表是什么样的,派生类虚表,单继承、多继承、菱形继承
- #define与const的区别
- volatile 关键字
- C++中的强制类型转换:reinterpret_cast、static_cast、const_cast
- 析构函数中抛出异常时概括性总结
- C++1X、C++20 新特性
以上是你C++的知识框架,你需要学习的内容也是这些。
不求精通C++,但至少对这些概念都要熟悉一遍,为以后深入学习打好基础。
视频学习
对于这种短时间的学习,直接上手啃大部头书籍不是最好的选择,我推荐是从C++视频教程或者公开课入手,以视频的方式学习,可以降低上手门槛,毕竟是有一个老师带着,哪里是重点内容、哪里容易犯错,都能给你指出来。
这里我也给你找了一些优质的C++视频资源。有些是大学的C++公开课,有些是广受好评或是非常经典的C++教学视频,比如侯捷老师的C++系列,都是有口皆碑的经典视频教程!
大学公开课
题主应该是学生,如果你更习惯于大学老师授课的形式学习,下面我推荐两个高校的 C++ 程序设计公开课,这种学习方式和大学课堂一样。
清华大学C++程序设计
课程链接:https://www.bilibili.com/video/BV1QE41147RT?from=search&seid=9968636621529029872
img清华大学这个视频是C++程序设计课,最大的特点是知识点特别全面!几乎覆盖了我上面列出的知识点内容,就相当于老师带你上玩这门大学课程,总共197集,但不要被吓到,平均每集也就7分钟左右,开倍速刷起来很快!
电子科技大学C++程序设计基础
课程链接:https://www.icourse163.org/course/UESTC-1001774006
图标电子科技大学的C++程序设计课程,是国家精品课程,都是大学讲课的方式,时间有限的话和上面清华大学的课程挑一个看。时间充足两个都刷一遍也可以,或者对某一个知识点拿不准,可以直接找到两个公开课的同一个知识点对比着学习,效果更佳,官方课程团队对这门课程的说明:
本课程适合没有编程基础或者学习了C或者C++语言,仍然不能根据问题独立编写程序的初学者。从理论到实践,从分析问题,寻找解题思路,到编程、调试、运行,都借助于实际案例进行展示。特别是初期的编译错误,后期的运行错误,通过视频一步步的演示学会编程方法与调试技术。 ----课程团队
优质C++视频教程
以上推荐的高校 C++ 程序设计课程,整体上还是大学上课的形式,画风比较严肃,有些人可能不大习惯这种方式,我推荐可以在 B 站搜索 C++ 学习视频。
B站上有些是培训班的老师讲课视频可以免费观看,那些老师都有实际项目经验,授课比较形式也风趣,当初沉迷 B 站学习无法自拔,对于初学C++的编程小白,良心推荐下面这个 C++ 视频教程。
B站的黑马程序员C++教程从0到1入门编程
课程链接:https://www.bilibili.com/video/BV1et411b73Z?p=1
不是我给黑马打广告,他们也没充钱!
这是 B 站上的一个免费学习视频课程,据说是 B 站上初学 C++ 面向新手的最好教程,这个视频有多受欢迎了呢?口说无凭,这个视频在B站有 435万的播放量!看下面截图中在 B 站的点赞与收藏量也能知道。
img我截一些评论给大家看下:
img这个视频教程非常适合入门,从零开始带你学习。最后还会带着做项目,目录截取一部分能了解大大概的学习内容。建议从头到尾刷一遍,掌握 C++ 基础问题不大。
img img进阶视频
看上面这几个视频入门肯定够了,45天多了也看不完。但是,还有一些优质的 C++ 学习视频我也给列出来,后续进阶学习可以继续深入,到时你就用得上了。
我这里说的优质视频就是,侯捷老师的 C++ 视频课程,
侯捷老师本身实力非常强大,即使你没看过他的视频,也一定会看过他的书,他参与翻译或编写的图书包括:
- 深度探索C++对象模型
- STL源码剖析
- Effective C++
- More Effective C++
这些书只要是学习 C++的同学,一定都听过或看过(没看过那要赶紧计划着去看了),对于想要C++进阶的同学,侯捷老师的C++系列视频我也非常非常强烈建议大家去观看学习。
一定会让你对C++的理解上一个层次!这些视频都是免费的可以在B站直接观看学习,直接在B站上搜索「侯捷 C++」即可。
[侯捷]C++ 面向对象高级编程:
img[侯捷]C++11 新特性:
img[侯捷]C++内存管理--从平地到万丈高楼:
img[侯捷]C++ STL 体系结构与内核分析--从平地到万丈高楼
授人以鱼不如授人以渔,初学C++不知道去哪找视频学习资源?我来告诉你!
一般在中国慕课大学、网易云课堂、B站(真的是个学习网站)去搜索即可,除了我找的这些视频,自己也可去以上平台搜集!如今信息爆炸时代,高效的信息检索能力也是不可缺少的技能!
C++入门书
当然了,只看视频学习的话,看完一遍你就不记得了,还是要回归书本。看视频学习的同时,找一些C++教材来看,C++的经典图书有很多,网上一搜一大把,但是一个寒假你肯定看不完那一堆的书。我就给你推荐一本:
- 《C++ Primer 》豆瓣9.4
这本书如果有 C 语言基础的话,一个寒假看完应该是可以的,我有 C 语言基础看的比较快,当初大概花了半个月时间看完,初学者看的时候有很多不太理解的地方,很正常,跳过去没关系,先快速过一遍。
第一遍看书的目的就是熟悉概念,不求甚解。
我会告诉你,虽然我花了半个月看完这本书,但是这本书一直放在我桌子上,每次遇到问题我会翻阅来找答案,这样翻了将近 3 年,有时以前不理解的内容,在一次次遇到问题来翻阅的时候豁然开朗,对概念的理解一次次加深,每次看都有不一样的理解!
现在这本书还在手头,只是翻的次数变少了,封面已被我翻烂了。
当初买的 Primer 第四版这本书我当初买的时候是第四版,现在有第五版你可以直接买第五版,包含了C++11的语法特性说明,这些新特性现在很多开源项目和公司都有成熟的项目在使用了,初学的时候一起学了没坏处。
这本书的使用方法,我前面也说了。另外,我推荐的学习方式是:跟着前面的学习视频+看书同步进行,具体的执行步骤:
- 视频讲到哪一小节可以先在 Primer 找到对应章节内容,
- 先预习一下视频要讲的知识点在 Primer 中的对应章节,再看视频。
- 看完视频一个章节之后,再来通过回顾 Primer 中内容复习。
- 有时间写写 Primer 课后习题的代码,记住一定要动手敲代码!
至于,其他的C++经典图书,虽然我也想推荐,但是这篇文章只说入门,短时间太多书你也看不完,后面我再推一期,C++从入门到进阶的书单介绍文章。
项目和练习
按照我给你的安排,书看了视频也学了,差不多算是入门了。
但是别忘了,最最重要的内容,动手敲代码!要知道编程也是一门手艺活,光看不练的话,实际项目中是写不出代码的,自身水平也只能停留在课本层面,因为你没有把C++内化成自己的东西。
去哪里找练手的代码和项目?
课后习题
C++ Primer 这本经典入门教材的课后习题是个宝藏库,那些习题一定要动手去实现一遍,比如习题中经常出现的 Screen 类的设计、Message 类的设计,这些都是在锻炼你的编码能力,写一遍和看一遍的效果是完全不一样的。
开源项目
先给你找几个开源小项目,练练手,同时借鉴学习下开源项目的代码风格和编码方式。
TinyXML
我们经常需要在项目中处理 XML 配置文件,有没有想过自己编写一个简单通过的XML解析器,这里就是一个用C++ 编写的,非常简单小巧的 XML 解析器,可以很容易地集成到其它项目中,出于C++学习目的的话,你也可以把代码下载下来学习练手。
项目主页: http://sourceforge.net/projects/tinyxml/
C++ JSON 解析器
JSON++ is a light-weight JSON parser, writer and reader written in C++. JSON++ can also convert JSON documents into lossless XML documents.
用C++写的轻量级 JSON 解析器,同时还可以将 jSON 文档转换成 XML 文档
项目主页:https://github.com/hjiang/jsonxx
迷你的C++11 JSON库
json11 is a tiny JSON library for C++11, providing JSON parsing and serialization.
同样是是个mini JSON 库,仅 1个 CPP 文件和一个头文件,方便的嵌入到自己的项目中
项目主页:https://github.com/dropbox/json11
这些都是比较简单的练手项目,还不过瘾想要更多C++项目练习?可以看我整理过的这篇文章:
以上就是我给你的 「C++ 短时间入门」学习建议,全文总结一下:
- 视频学习优先
- 快速看书掌握C++知识框架
- 课后习题和小项目练手巩固
下班回来坐电脑前打了几个晚上,一不小心写了几千字,应该能给你点学习方向,自学入门实现弯道超车~
原创分享码字不易,如果文章对你有帮助,收藏之前点在看支持一下,转发分享更是真爱了!
往期精选(点击可查看)
----------------------
你好,我是柠檬哥,普通高校本科,非计算机科班,自学计算机基础,做过通信软件开发也混过互联网,现在是某 BAT 大厂高级软件工程师。
在公众号分享编程学习和个人的一些思考,欢迎关注,一起进阶。