47天入门c++

558 阅读5分钟

欢迎关注公众号:sumsmile, 图形学、移动开发~~

从事开发工作近10年了,去年开始写C++。这篇文章讲我作为C++初学者,对学习一门语言的思考。

搜索了很多教程,有不少只是单纯的罗列学习资料,很怀疑作者自己是否读完了那十几本C++书籍。

罗列资料 == 劝退。我尝试写一篇最简单的鼓励帖,不敢说学完多高水平,应付普通的开发没问题。

下面列的学习内容,很多写过几年C++的朋友,不一定都掌握了。 47天学好C++

用不上的工具,就不要学

业余时间,我也学了很多门其他的语言,OC python dart ruby php...,工作中几乎用不到就都忘了,最熟练的还是java。

语言就是工具,很多人一辈子都用不上英语,真的没必要去背单词虐自己。需要的时候,带着目标去学更合适。

if(你真的不需要写C++,那就别浪费时间学了,人生苦短。) {return;}

一个星期入门,上项目

大多数语言,一两个星期扫一遍语法就够了,直接上项目,在解决问题的过程中,体会语法的细节。

开发一段时间之后,再回过头来看进阶的书籍,系统的梳理这门语言的特点。

找个大腿

有条件的话,给自己找个老师,特别是刚开始,帮你解决编译、调试的问题,节省时间。

最好是把电脑抱到大腿旁边,结对编程,眼睛都不要眨,重点看他分析问题的过程,时不时的问他一句:"你怎么知道这么改就好了?"

是的,我不是开玩笑,我自己就是这么干的。刚入门时,找个大腿一步步示范给你看是非常好的学习方法,快速的学习别人积累了很多年的经验。

选一个好用的IDE

有的教程讲,建议学生先用最简单的记事本写,在命令行里敲编译命令。我是实践过的,听我的,不要那么干。

直接按照真实的开发环境来。磨刀不误砍柴工,花点时间配置好IDE,在写demo练手的阶段,就开始熟悉IDE,熟悉IDE的使用也是掌握这门语言的一部分

推荐使用Clion,因为大家都用这个。

带着问题学语言

带着问题去学习一门语言,便于你系统的梳理语言的特点。

当然,如果你觉得带着这些问题心累,Ok,假装没有这一条。

看什么书?

C++ primer确实是经典好书,建议新手可以买一本当字典(垫显示器),不要去硬啃。作为一本经典好书,太细致了,但是很多细节你一开始又用不到。

我们学汉字,老师也不是对着汉语词典讲,而是放到语境里,由易到难来分解的。

推荐一本书,我非常愉悦的、完整的、看过的。

需要的留下邮箱,发你网盘,高清无码的

真的用不了21天,我就下班回家看一两个小时,两个星期就可以快速扫一遍。

看视频

C++是真的有点难,语法灵活细节多,有必要深入的了解背后的原理,知道why,才能写出健壮的、高性能的代码。

开发一段时间后,强烈建议找点视频来学习,下面这张图,讲内存管理的,纸质的资料真的很难讲清楚整个流程。

内存管理-侯捷

推荐看侯捷老师的视频,推荐理由如下:

  • 大气磅礴,既谦逊又自信,娓娓道来,听得很享受
  • 同理心。侯捷说:我自己资质平庸,学的过程中遇到很多困难,所以我太懂一般人哪里会遇到困惑(大师过谦了)
  • 既讲清楚how,也会讲why,还会讲自己是如何一步步研究清楚的,把研究的方法教给你
  • 侯捷老师文人气很重,时不时信手拈来一句诗。他也自我标榜"左手程序右手诗"

网盘链接: pan.baidu.com/s/16NVyr20p… 密码: uflr

学习问题记录

学习的过程中,整理了一些问题,分享给朋友们参考,可以作为检验你学习效果的题目。

  • 传值、传引用、传指针的区别,什么时候不能传引用?java 函数底层是值还是传引用呢?
  • new 和 delete底层干了啥?和malloc、free有啥区别?
  • 什么是模板特化和偏特化?偏特化有哪几种类型?
  • 编译过程中,什么是动态绑定,什么是静态绑定?
  • const有哪些用处?
  • 内联函数inline一定能内敛吗?
  • c++中,new delete能重载吗?malloc、free能重载吗?
  • std::alloctor的实现原理
  • 对象的内存分配,如何计算一个对象的内存占用?debug和release编译条件下,对象内存占用一样吗?
  • 一个对象的内存分布的开头有cookie,cookie的作用是什么?有什么办法能去掉这个cookie吗?
  • 什么是SBH
  • malloc的速度其实很快,设计allocator的目的是什么呢?
  • C++的内存分配是分多层级的,为什么要分这么多层?

c++内存-侯捷

  • 标准库有哪几个模块

STL-侯捷

  • Deque(双向队列)的原理,为什么能双向操作进出呢?

STL-侯捷

  • 模板有哪几种类型?

  • 容器list占几个字节?(G4.9中 容器list本身是8个字节,一个指向next,一个指向preview)

  • map insert和 []中括号操作符,这两种操作方式,哪一种插入更快?why?(直接insert快,[]操作符里面的实现会先查找,查找完再进行insert)

  • 如何实现STL里的仿函数(需要继承binary_function 或者 unary_function, why?)

  • c++ 11有哪些新特性?

  • NULL nullptr nullptr_t的区别

  • c++ 和 java的lumbda的区别?(从作用域角度说明)

  • C++和java的可变参数有什么区别?

  • c++三种继承声明的区别 private protected public

  • tuple的实现原理

  • 实现一个move aware class

欢迎关注公众号:sumsmile, 图形学、移动开发~~