如何系统地学习 C++ 语言?(2021年4月更新)
GitHub,永远滴神!
一、C++ 快速入门指南
首先分享一个最近在 GitHub 特火的一个 C++ 项目:C++ 快速入门指南。
地址:https://github.com/Light-City/CPlusPlusThings
这是一个适合初学者从入门到进阶的仓库。
这个开源项目的作者是一名研一才接触 C++ 的同学,目前已经拿到了鹅厂后台开发的 offer。
一开始他只是在 GitHub 上建立「C++ 那些事」只是作为自己的学习笔记。但没想到,两年内,这个项目受到越来越多人的追捧,并在本月初登上了热榜,于是他对整个项目的结构做了梳理规划,细分出了「基础」、「进阶」、「实战」板块,并将所有代码开源供大家学习,此外还专门为这个项目做了网站。
地址:https://light-city.club/sc/
![v2-bb36c474172cd71d781485834386075b_b.jpg](https://img-blog.csdnimg.cn/img_convert/beb8cbc6dc9af64ec5f5660936b9f8a1.png)
它可以帮助初学者了解如何入门 C++,也可以帮助面试者如何深入 C++。
整个项目包括从入门到就业的全部环节,称得上是保姆式的编程指南。
我觉得这个项目是最符合题主要求的一个项目了。
二、写个小白的 C++ 学习路线!
参考来源: https://mp.weixin.qq.com/s/bzE9NVkYxA5qq9T-l28j5g
作者:CodeSheep
写个小白的 C++ 学习路线!
![v2-b1470b7b325048c6bf9248b0a9c15239_b.jpg](https://img-blog.csdnimg.cn/img_convert/61ea6fece6e9fbc76616d5c1b921b6e0.png)
1、C++ 的工作岗位有哪些?
C++主要还是做后台(服务端)开发比较多,包括:
- 通信公司后台开发
- 互联网公司后台开发
- 游戏公司后台开发
- ……
当然这个后台开发具体职责又有很多细分,比如:
- 有做数据处理和分析的
- 有做基础协议和通信的
- 有做服务端底层应用优化的
- 甚至还有做后台系统驱动和内核的
- ……
不管怎样,下面即将要介绍的这些学习路线和内容适用于以上所有情况。
2、C++ 的学习书籍推荐?
- C++和C语言确实是不同的语言,但是C++确实是对C语言的延伸,可以理解为在C语言里加入了面向对象的特性。因为只有面向对象特性的加持,代码才能更好的复用、扩展和工程化,这是大型项目的必备要素
- 除了C语言所有的底子之外,还需要学习C++的面向对象(封装、继承与多态)特性、泛型、模板、STL等等
推荐书籍(有先后顺序):《C++ Primer》、《Effective C++》、《C++ 标准程序库》、《STL源码剖析》《深度探索C++对象模型》
补充一个小建议:语言部分的学习建议不要拖太久,一定要规划好时间,一鼓作气,高强度给它压下来,否则容易把自己拖泄气。
3、编程基础“四大件”
基础四大件包括:数据结构和算法、计算机网络、操作系统、设计模式
这跟学什么编程语言、后续从事什么编程方向均无关,只要做编程开发,这四个计算机基础就无法避开。可以这么说,这基础四大件真的比编程语言重要!!!
具体介绍可以看我之前写的一篇回答。
计算机基础知识对程序员来说有多重要?4、应用实践编程
这部分会涉及到一些工具、编程环境、和具体编程实践,应该说这一部分学完,自己应该能做点东西出来、或者说能看懂一些实际项目的代码。
实践这部分,我也是结合我之前在通信公司的实际工作经历和所听所见,来聊一聊。
1、Linux操作系统的使用
很多人初学C语言、C++(包括我)都是在Windows环境上进行的,而实际企业级开发几乎不可能,所以Linux系统必须要会,我们别无选择。先谈使用。
包括:常见的Linux操作命令、基本的Shell编程。
推荐书籍:《鸟哥的Linux私房菜》
2、编译/调试工具
首先是跟编译相关的:编译工具!
我们知道很多人学C语言、C++都在类似Visual Studio这种集成IDE里进行代码编译,这个其实也用了编译器,只不过是微软自家的MS编译器,而且所有操作均可视化。而企业里开发很少会基于Windows系统,所以Linux平台上的编译器更为重要,最典型的当属 GCC,甚至有些公司有自己定制过的交叉编译工具,但没关系,只要 GCC熟悉,其他问题都不大。
其次,大家自学C语言、C++,都借助类似VS这种IDE,点按钮即可对源文件编译。而企业里实际项目的编译动作叫 make,编译的实际动作和过程都是写在 makefile文件里,所以makefile的书写规则建议学习!
最后说到调试工具,Linux平台上的 GDB调试工具要熟练使用,会借助于它进行调试。
推荐资料: 这部分没有书可推荐,英文好的同学可以直接看 GNU官网关于 GCC和 GDB的文档,中文材料可以看:《debuging with gdb》(中文版)和陈皓先生的《跟我一起写makefile》
3、Linux环境编程
还是那句话,企业里C语言和C++几乎都是基于Linux平台的,这一部分我们没办法避开
(1)Linux系统编程
众所周知,Windows系统编程里有各种各样的Windows API,同理Linux系统API的使用就更加重要。
(2)多线程编程
此处指的是多线程编程实践相关的东西,一般包括:线程、资源、信号、同步、互斥、锁等等一些具体的编程方法。
(3)网络编程
此处的网络编程主要指的是具体Linux系统上的网络编程 API和 IO函数的编程实践。
推荐书籍:这三部分综合在一起,推荐必看书籍包括《Unix环境高级编程》、《Linux高性能服务器编程》、《POSIX多线程程序设计》
三、书籍推荐
下载链接:链接: https://pan.baidu.com/s/1MrfDkPF9aaoRTT3jL60bYw 密码: ufh5
手册类:
- 《C++程序设计语言(The C++ Programming Language)》
- 《C++标准程序库(C++ Standard Library Tutorial and Reference) 》
- 《The C++ IO Streams and Locales》
- 《The C++ Standard (INCITS/ISO/IEC 14882-2011)》
- 《Overview of the New C++ (C++11/14) 》
- 《The Standard C Library》
初级:
- 《C++ Primer》
- 《Accelerated C++》
- 《C++编程思想(Thinking in C++) 》
- 《C++程序设计原理与实践 (Programming: Principles and Practice Using C++ )》
- 《C++初学者指南》
- 《C++ Primer Plus》
- 《Visual.C++.2008入门经典》
- 《面向对象程序设计—C++语言描述》
- 《数据结构(C++语言版)第三版_邓俊辉》
实用:
- 《Effective C++ 》
- 《Effective STL》
- 《深入浅出设计模式》
- 《设计模式:可复用面向对象软件的基础》
- 《HeadFirst设计模式》
- 《大话设计模式》
中级:
- 《More Effective C++ 》
- 《Exceptional C++ 》
- 《More Exceptional C++》
- 《Exceptional C++ Style》
- 《C++编程规范(C++ Coding Standards) 》
- 《C++ 模板完全指南(C++ Templates: The Complete Guide)》
- 《Beyond the C++ Standard Library(Boost)》
- 《C和C++安全编码》
- 《深入理解C++11》
高级:
- 《C++设计新思维-泛型编程与设计模式之应用(Modern C++ Design ) 》
- 《C++模板元编程(C++ Template Metaprogramming)》
- 《C++ Concurrency In Action》
- 《Advanced c++ Programming Styles and Idioms 》
- 《Real-Time C++ Efficient Object-Oriented and Template Microcontroller Programming》
- 《Advanced_Metaprogramming_in_Classic_C 》
经典古老:
- 《C++的设计与演化(The Design and Evolution of C++ )》
- 《C++沉思录(Ruminations on C++) 》
- 《大规模C++程序设计(Large Scale C++ Software Design)》
- 《深度探索C++对象模型 (Inside the C++ Object Model )》
计算机网路:
- 《TCP/IP卷一》
- 《计算机网络:自顶向下》
- 《图解HTTP和图解TCP/IP》
- 《计算机网络》
操作系统:
- 《深入理解计算机系统》
- 《现代操作系统》
- 《Linux内核设计与实现》
- 《Unix网络编程》
数据结构与算法:
- 《算法导论》
- 《数据结构与算法(Java版)》
- 《算法图解》《啊哈算法》
- 《剑指offer》
- LeetCode教科书式刷题网站
数据库:
- 《数据库原理》
- 《SQL必知必会》
- 《深入浅出MySQL》
- 《MySQL技术内幕:innodb存储引擎》
- 《高性能Mysql》
- 《Redis实战》
- 《Redis设计与实现》
分布式:
- 《分布式应用》
- 《大型网站技术架构》
- 《大型分布式网站架构设计与实践》
- 《分布式服务框架原理与实践》
- 《大型网站系统与Java中间件开发实践》
- 《从Paxos到Zookeeper分布式一致性原理与实践》
- 《大规模分布式存储系统》
云计算:
- 《OpenStack设计与实现》
- 《docker入门与实践》
- 《Kubenetes权威指南》
大数据:
- 《大数据技术原理与应用》
- 《Hadoop实战》
- 《Hadoop权威指南》
相关文章
- 【C/C++学院】0817-递归汉诺塔 双层递归 /CPP结构体 /面向过程与面向对象的编程模式/类的常识共用体实现一个类的特征/QT应用于类以及类的常识
- 【C/C++学院】0725-内存补码分析/补码原码实战/打印整数二进制数据/静态库说明
- C++矩阵处理库--Eigen初步使用
- C/C++每日一练(20230421)
- C语言/C++常见习题问答集锦(七十七)之玫瑰花数
- C语言/C++常见习题问答集锦(二十一)
- Open3D(C++) 计算三角形面积
- C++中的对象初始化
- c++模板学习06之类模板与函数模板区别
- LinuxC++开发面试系列(三):代码运行、gcc编译、system函数与VS2013 C4996解决方法
- C调用C++代码
- C++学习笔记(十二):重载函数
- C/C++学习站点资源
- C++ vector与数组转换写入/读出文件(十八)
- C++ Primer 学习笔记_57_类和数据抽象 --管理指针成员
- C++ Primer 学习笔记_44_STL实践与分析(18)--再谈迭代器【下】
- C++程序运行过程中发生异常闪退,很有可能是这三个原因导致的
- C++11中using的用法学习
- HLS开发学习-07- Vivado HLS 中的 C++ 基本运算
- 【C++ 科学计算】C++ 矩阵累加(求和)所有元素
- C/C++学习笔记十二 Input and Output (I/O)(2)
- PCL 统计滤波(C++详细过程版)