【19软工一班】如何学习C++

用户头像
来自上海海洋大学-袁葆林发布于:2020-04-25 20:37:09

C++入门(停留在表面)

参考标准:熟练掌握 C++ 语法结构,了解 C++ 主要模块,技术难点。大部分书上可以找到的知识点。

学习 C++ 要不要学习 C ?

作为这样的一篇文章,这个探讨几乎是必须要做的。我的观点很明确,要学!因为我先学 C 语言,后学的 C++ 的,而且学习使用过程中无数次穿插的相互学习。我的程序中从来没有刻意的区分这是 C 还是 C++,我把握的标准是怎么样方便怎么来。就好像文件读写我从来都不用 C++ 的文件流,因为我习惯了 C 语言的 fread、fwrite、 fopen、 fseek、 ftell 等等。我是站在语言的语法和库的角度来说“要学”的。如果你要学面向对象的话,那就没必要学 C 了,好像也没有学 C++ 的必要了,你可以选择一个纯面向对象的语言去学面向对象岂不更好。总结,以我的个人经历来说,学 C++ 可以先学习 C 语言(观点已明确,探讨结束!)。

要了解哪些东西呢?总结是两点:语法和库。所有的语言几乎都是一样的。

  1. 语法[基本类型、标准库类型、数组和指针、表达式、语句、函数等]
  2. STL[容器,算法]
  3. 模板与泛型编程
  4. 类与面向对象

语法熟练的是必须的;熟练使用 STL 编程,面向对象思想不是一天两天就可以有的,需要不断的历练和实战才能培养出来的;面向对象在C++中的实现方式一定要熟(继承,派生,虚函数等);模板的实参演绎要搞清楚。

如何实现入门?

  • 看书。《C++ primer》,《C++标准程序库》,《C++ template》
  • 多思考,多写小程序。

C++进阶(技术研究)

参考标准:内部机理,奇淫技巧

  1. 深入C++内部,探究实现的机理[为什么模板不支持分离编译?虚函数/多重继承是怎么实现的?类型转换做了那些事情?异常处理?等]
  2. STL源码学习[学习别人的设计方法?为什么STL效率高(为达效率,无所不用其极)?学习数据结构和算法?内存池?RTTI?等]
  3. 内存[理解指针运算?内存对齐?类的内存布局?new/delete 和 malloc/delete的区别?函数变参的实现?存储方式?智能指针?等]
  4. 编译器在编译,链接的过程中偷偷的做了那些事情。[如何分析编译器的提示?链接错误代表可能出现哪些问题?等]
  5. 跟上C++库的潮流,研究新标准。

如何实现进阶?

  1. 看书。Effective 系列书籍,《STL源码剖析》,《C++标准程序库》,《C++沉思录》,《高质量C/C++编程》,《C++编程思想》,《深度探索C++对象模型》等。
  2. 写软件,遇到问题之后自己折腾,自己探索。
  3. 逛社区,回答别人的问题。
  4. 多看看别人的博客。
  5. 结交自己的技术圈子。

C++高手(走出C++)

参考标准:面向对象编程,泛型编程

面相对象和泛型编程是 C++ 的精粹,学好这些方面光靠书本上的知识是不够的,只有大量的实战才能切身体会它们的优势。

很多人自以为自己C++学的很不错了,其实他只是在用C的方式写C++代码而已,这句话不无道理。

如何成为高手?

  • 看书 《面向对象分析与设计》,《设计模式——可复用面向对象软件的基础》,《泛型编程与STL》《C++模板元编程》等。
  • “实战->感悟->总结->实战->感悟->总结……”如此循环
点赞 (25) 回复
发布回复
点击图片