关于C++学习

来源:互联网 发布:五五开这个人 知乎 编辑:程序博客网 时间:2024/06/05 00:27

关于C++瓶颈:
链接:https://www.zhihu.com/question/19977459/answer/16567687
瓶颈期其实就是选择方向的时期,因为C语言能做的事情实在太多了,上至游戏开发,下至操作系统,中间还可以做做驱动,做做算法,做做工具软件,等等。此时,你要做一个决定,找一个你喜欢的方向,研究下去。

相信学习之初,都是学的语法之类的与应用关联较小的东西,而要深入的话,必须做点真正“有用”的东西。

怎么做?

1、自己动手做点较大规模的代码,比如一个小游戏,一个小工具,一个小的操作系统,规模要在5000行以上,如果能做到一次完成这么大规模的代码,那么你的能力会有非常明显的提升。

2、自己分析、调试、修改超过10万行的代码,这个可以是别人的成品源码,可以是Linux内核里的一个驱动,可以是任何东西,一个优秀的开发人员,必须具备掌握大规模代码的能力。

3、重复第一条,精简你的代码,把5000行精简到4000,3000,2000,甚至是1000,而功能不损失,这样就可以提高算法的能力,以及对编程细节的掌握。

4、重复第3条,把已经精简过的代码,再扩充新功能,使其规模增长到2000,3000到5000行,然后再试试精简。

相信你如果把以上4条都完成,那么必定能突破瓶颈期。当然,也有很多人败在这里,或者被吓倒。

另外,好的开发人员离不开优秀的工具,你需要一个好的开发/调试工具,工欲善其事,必先利其器,不管是VIM或者Source Insight,不管是免费的还是盗版的,你需要掌握至少一种工具,否则,10万行代码你都不知道从哪开始看。代码管理工具也是很重要的,比如github,svn等等,不然当你发现你想回忆一下一星期前代码是什么样的时候,你会发现,哎呀,我忘了!

最后,编码风格也很重要,好的注释,好的缩进和空行,会让你开发变得轻松。

关于C++ Primer的学习:
链接:https://www.zhihu.com/question/29112393/answer/43461605
请问学习完是什么状态,而 C++ Primer 是哪一版?课后习题全都自己做过了?

如果你学习完,指的是把书看完了一遍,那容易忘是必然的,又不是读唐诗宋词,谁能不忘?再说,把自己当活字典有何用?

如果是第四版,我建议你再去看第五版,了解 C++ 11 的语法,基于 C++ 11 标准进行练手,在当前环境下,意义要更大一些。

课后习题实际隐藏着很多小项目。譬如:

  • 第七章引入了两个类:Screen 和 Window_mgr,这实际是一个写字板程序的雏形,有没有想过继续完善下?结合 GUI
    框架做出一个小玩意来?

  • 从第十二章到第十三章,逐步引入以下类:StrBlob -> StrVec -> String,这实际是在指导你,从底层实现 STL
    基础模板?有没有想过将 String 类完善一下?譬如如何实现 c_str() 的功能?你的 String 效率与 STL
    有何区别?能否超越?vector 呢?(这个很难超越)set 呢?(这个有可能)

  • 当然还有诸如 Folder 和 Message 类,实际是一个邮件管理系统的雏形,这样的例子不胜枚举。

所以,如果你真的认真做了习题,或是深入思考过这些题目,我觉得应该是不愁练手的。

而你表现的如此急切,倒是有点缘木求鱼的感觉。

==============干货分割线==================

好的C++开源项目不胜枚举,如:

  • facebook/folly · GitHub

  • TTimo/doom3.gpl · GitHub

  • https://github.com/EpicGames/UnrealEngine

  • v8/v8 · GitHub

  • qtproject/qtbase · GitHub

  • ideawu/ssdb · GitHub

  • zeromq/libzmq · GitHub

  • miloyip/rapidjson · GitHub

都很值得去研究学习,但你是否能够一口去吃这些胖子,深表怀疑。大多数人,应该是头晕眼花,不明所以的。

自己想做点小项目练手,我也可以提供一些思路:

  • 高精度计时器:参考 QueryPerformanceCounter function (Windows)

  • STL 容器类:上面提到了。

  • 自己实现智能指针:其实还是习题的范围。

  • 实现类似 Qt 底层的信号槽

  • 实现一个 mini GUI 库

  • 实现一个类似 http://alleg.sourceforge.net/ 或 SDL 这样的游戏引擎,并做一个小游戏。

  • 实现一个简易的序列化框架,想想如何将对象存取于磁盘上。

  • 有人抱怨 c/c++有什么非常好用的字符处理库吗? ,你来实现一个 std::string 的工具库?

  • 将上面这些东西,都封装成 dll/so/lib 的形式,供自己或更多人日后使用。

经历以上过程的洗礼,C++ 能忘就忘了吧,没关系~

0 0