如何系统的学习c++

Posted 羽峰码字

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何系统的学习c++相关的知识,希望对你有一定的参考价值。

目录

一. 入门

1.1 C语言基础

1.2 c++基础

二、提高

三、进阶

3.1. STL 源码

3.2 对象模型

四. 编程基础四大件


二、提高

三、进阶

1. STL 源码

2 对象模型

四. 编程基础四大件


 

大家好,我是羽峰,一个c++刚入门的小白,本文整理了一些c++学习路线,当然自己也在路上,期待与您一起成长。如有需要,欢迎关注“羽峰码字”公众号,我们一起畅聊人生。

学习C++ 可以分为几个阶段

一. 入门

1.1 C语言基础

首先是c语言基础

  • 基础的语法:变量、条件、循环、字符串、数组、函数、结构体等
  • C语言重点:指针、内存管理

推荐书籍:《C Primer Plus》、《C和指针》、《C专家编程》

当然这只是c++基础,理解就好,当然,指针和内存管理是很重要的,建议多理解,多看看。接下来我们重点理解c++一些东西

1.2 c++基础

c++基础,可以看b站黑马程序员c++视频,还可以看这个网址:https://github.com/Light-City/CPlusPlusThings

这个过程你需要了解并且掌握一些基本概念

变量、常量、类型、循环、判断、数组、字符串、对象、输入输出等,

c++面向对象编程:封装,继承,多态,

C++ 中一些特有的东西,比如命名空间 namespace、引用、模板等。

最后就是一些 STL 中的类库,比如 string、vector、find 等。

了解基础之后,就是敲代码了,理论和实践是不一样的,特别是c++,理论很懂,但实操会有各种bug,敲代码可以更好的理解理论中一些自己忽略的东西。这里推荐一个网址:

https://www.codewars.com/kata/search/cpp,有点像 LeetCode 刷算法题一样,这里针对每一个语法知识点都有一系列的练习题可供选择。

这里在辅助一下以下基本书,主推前两本。

  • 《Accelerated C++》(美国斯坦福大学的经典教材)

  • 《C++ Primer》(大而全)

  • 《The C++ Programming Language》(C++之父 Bjarne Stroustrup 所著)

《Accelerated C++》《C++Primer》适合初学者;

《C++ Programming language》 是C++专家自学指南,顾名思义,适合有较深厚 C++ 功底的读者。

这几本书是一个辅助工具,可以对不懂的地方查漏补缺,不会哪里看哪里。也可以看着目录,看一些自己感兴趣的章节,没有必要从第一页开始挨着挨着读。

多用代码去验证自己的想法,尤其是指针、引用、构造、析构这些地方,可以去刷力扣题,或者github上一些开源的小项目。

学习 C++ 以及日常开发一定要记得这几个网站,可以随时查阅一些语法的用法和标准库:

二、提高

基础之后就是提高了,提高篇就是优化自己的代码效率,命名规范,内存管理,数据传递方式,以及一些使用技巧。由于 C++ 是一门系统级编程的语言,你需要掌握一些 OS 方面的知识才能更好的使用。

尤其是内存编译链接这一块,比如堆、栈、静态链接、动态链接等等。

还有一些 C++ 里比较特殊的概念,比如 RAII 的资源管理方式、值语义与生命期、引用、右值引用等等。

这些东西似乎没有一本很系统的书籍可以帮助你掌握,只能在不同的书里吸收完善。

这一块,我也在学习,这里给出一些在这些方面有帮助的书籍:

  • 《Effective》三部曲

一言概括,就是帮助你快速习得一些 C++ 里正确的姿势。

这里推荐b站侯捷老师一些视频,可以辅助看看,应该会有不一样的效率。

帮助你掌握一些系统级编程的知识。如内存管理、堆栈、链接这类在 C、C++ 中极其重要的概念。

  • 《Linux多线程服务端编程》

这本书严格来说不是纯讲 C++ 的。

但是里面会有一些章节,关于 C++ 多线程编程、锁、线程安全、C++ 一些工程实践经验还不错。

  • 《Google C++ Style Guide》

谷歌的 C++ 代码规范,写代码是一件专业的事,把代码写得漂亮、专业也是一项能力。

谷歌的代码规范算是 C++ 领域一个标杆了。

三、进阶

3.1. STL 源码

侯捷老师说:源码之下,了无秘密。所以源码一定很重要,避免一些杂七杂八东西来浪费自己的时间

为了更好的使用 STL,一个方法就是阅读 STL 源码 或者掌握部分实现:

《STL源码剖析》

这本书讲解了 STL 五大组件的底层实现。

包括内存管理、各类容器的数据结构实现、算法的实现等。

建议列为必读,可以帮助深入理解 STL 底层。

其中也有很多面试常考的知识点,如内存池、traits 技法、vector 动态扩容、set、map 等实现原理等。

3.2 对象模型

《深度探索C++对象模型》

这本书其实就是围绕一个点:C++ 里的对象是在内存中是如何组织的。

这是每个章节内容:

  • 关于对象

  • 构造函数语意学

  • Data语意学

  • Function语意学

  • 构造、解构、拷贝语意学

  • 执行期语意学

四. 编程基础四大件

基础四大件包括:数据结构和算法计算机网络操作系统设计模式

这跟学什么编程语言、后续从事什么编程方向均无关,只要做编程开发,这四个计算机基础就无法避开。可以这么说,这基础四大件真的比编程语言重要!!!

1、数据结构和算法

可以说这个直接决定了面试的成败!几种基础数据结构类型得烂熟于心,比如:字符串、链表、二叉树、堆、栈、队列、哈希等;基本的几大算法也要了如指掌,比如查找、排序、动态规划、分治等等。

建议LeetCode多刷题。

参考资料: 《大话数据结构》、《算法》、《剑指offer》《LeetCode刷题》

2、计算机网络

此处的计算机网络指的就是TCP/IP协议栈,可以说它是当下互联网通信的基石,无论如何一定要对TCP/IP的协议栈了如指掌,主要就是学习和掌握原理,包括:ARP协议、IP协议、ICMP协议、TCP和UDP协议、DNS协议、HTTP协议、HTTPS协议

推荐书籍: 《TCP/IP详解》

3、操作系统

该部分重点包括:进程和线程的相关原理、内存相关原理

推荐书籍:《深入理解计算机系统》

4、设计模式

倒不需要23种设计模式全部记住,常见的几个如:单例模式、工厂模式、代理模式、策略模式、模板方法模式建议熟练于心。

推荐书籍:《大话设计模式》、《设计模式之禅》

 

这里借鉴了公众号:编程指北 大佬的公共号的一篇文章,欢迎关注该大佬。还有知乎上一些回答,如有侵权,欢迎告知。

写在最后,我是是一名小白,期待与您一起成长。

我是羽峰,公众号“羽峰码字”,欢迎来撩

以上是关于如何系统的学习c++的主要内容,如果未能解决你的问题,请参考以下文章

有趣的 C++ 代码片段,有啥解释吗? [复制]

以下代码片段 C++ 的说明

C++ 代码片段执行

这些 C++ 代码片段有啥作用?

此 Canon SDK C++ 代码片段的等效 C# 代码是啥?

QT 实用代码片段