如何系统学习C++语言?太全面了
我是Jackpop,我们交个朋友吧!
C++ 是一种通用的、面向对象的编程语言,可用于开发操作系统、游戏、图形用户界面、后端以及高性能系统和应用程序。
因此,尽管Python、Go等后起之秀近年来大受欢迎,但在很多领域仍然无法撼动C++的地位。
今天我就教大家如何学习C++从浅入深,从入门到实用。
C++ 简介什么是C++?为什么要学习C++? C++的历史C与C++的区别编译型语言和解释型语言从入门到实际开发环境C++入门C++练习C++实用C++进阶学习资源书籍视频课程开源项目
C++简介
什么是C++?
当今流行的编程语言有很多,Python、Go、Java、PHP、JavaScript等,每个都有自己擅长的领域和方向。
C++在系统资源和内存控制方面更胜一筹。因此,C++在操作系统、图形、游戏、嵌入式系统等性能要求较高的领域始终具有不可替代的地位。
它可用于开发在服务器、PC、基于云的系统和移动设备等多个平台上运行的应用程序。
为什么学C++?
如果您对计算机游戏、高端计算项目的软件工程、加密货币挖掘程序以及开发移动设备操作系统等领域感兴趣,学习C++ 是必不可少的。
另外,相比Go、Python等更高级的编程语言,它会涵盖更全面的编程知识,帮助学习者理解变量、函数、面向对象、指针、内存……这些在很多地方都很容易找到。高级语言。被忽视的概念和知识。
C++的历史
C++ 由丹麦计算机科学家Bjarne Stroustrup 创建、设计和开发。
Strustrup 希望创建一种类似于C 的灵活且动态的语言,但具有更多功能。
它最初被称为“带有类的C”,并于1983 年更名为C++,意思是比C 高一级。
国际标准化组织C++联合技术委员会在1998年至2017年间对C++进行了五次升级。
新版本C++20 也计划发布。
C和C++的区别
C和C++有什么区别?
这是学习C或C++时无法回避的问题。
Jon Kalb(软件工程讲师、C++ Now 和CppCon 主席)表示,C++ 是C 的演变。
虽然有一些相似之处,但现在两者却截然不同。
尽管C语言应用广泛,但Kalb表示,它并不像C++那样支持抽象、通用编程和面向对象编程。
在大型项目中,常常需要非常高级的抽象,而C++在这方面远远优于C语言。
抽象级别是指观察或编程系统的复杂性。低级抽象有更多细节,而高级抽象可以包括整个系统。
C语言是一种编程语言,其代码由直接告诉计算机或其组件以逻辑步骤完成任务的指令组成。
C++ 也可以做到这一点,最重要的是,它支持类和面向对象等高级功能,这允许程序员创建包含数据和功能的“对象”。这种方法的优点是软件对象比过程指令执行得更快、更容易,并且面向对象的编程使代码更容易修改、维护和调试。
编译型语言和解释型语言
在谈论编程语言时,首先必须了解语言的类型。
编程语言可以分为编译型语言和解释型语言,下面分别解释。
编译语言:在程序执行之前,需要经过专门的编译过程,将程序编译成机器语言文件。运行时无需重新编译,编译结果可直接使用。程序执行效率高,依赖编译器,跨平台性能差。比较有代表性的有C、C++等。
解释型语言:与编译型语言相比,源代码不直接翻译成机器语言,而是先翻译成中间代码。程序只有在运行时才被翻译成机器语言。每次执行都要翻译,所以效率比较高。低的。比较有代表性的有Java、Python、JavaScript等。
从入门到实战
由于C++ 非常流行,因此有许多资源可供初学者使用,包括在线教程、网站和书籍。
当决定学习C++或者任何其他计算机语言时,你首先要知道它会用于什么方向、什么职位。
如果你从事机器学习、深度学习、数据分析等注重算法和分析,对性能不敏感的岗位,可以选择R或Python等语言来代替。
但如果从事游戏、系统等对性能要求严格的岗位,C++是首选。
现在,让我们开始学习之旅吧!
开发环境
前面提到,C++是静态编译语言,因此在开发环境配置过程中需要使用相应的编译器。
有许多可用于C++ 的编译器,GCC 或GNU Compiler Collection 是最流行的C++ 编译器之一。
以下是不同操作系统下的编译器安装方法。
Linux
如果您使用的是Linux,GCC 可能已经默认安装。
如果没有,您可以使用以下命令安装它:
# Debian/Ubuntusudo apt install build-essential# Fedorasudo dnf install make automake gcc gcc-c++# Arch Linuxsudo pacman -S base-devel Linux 下的IDE 可以选择Linux 下的Codeblocks IDE 或Eclipse CDT。
macOS
在Mac 上,您可以使用Clang 或GCC,两者都是免费的。
虽然GCC 支持更广泛的C 和C++ 标准,但Clang 在大多数情况下都能正常工作。
GCC 可以使用Homebrew 安装:
brew install gcc 开发工具可以选择Visual Studio Code 或Xcode。
Windows
Windows 上有很多好的编译器。
在Windows上,Visual Studio提供了C++编译器,也可以构建C语言程序。
Visual Studio 拥有自己强大且功能丰富的IDE,对于刚开始使用C 或C++ 或主要针对Windows 平台的人来说,它是一个不错的选择。
如果您想要一个更符合标准的编译器,GCC (MinGW) 也可用,并且可以配置Codeblocks IDE 来满足您的需求。
就IDE而言,Clang是目前比较好用的工具。此外,还有一些跨平台的IDE,例如Eclipse CDT、Jetbrains CLion和Netbeans,它们提供了功能齐全的C和C++开发环境。
最近,Visual Studio Code 非常流行,并且在多种编程语言中流行。它还可以在Linux和Mac环境中使用。
C++入门
语法是编程语言的核心,也是C++开发的基础。就像我们说汉语和英语一样,语法定义了C++ 代码的组成和理解。
这是示例代码:
#include iostreamusing 命名空间std:Int main () {cout ”Hello World” ; return 0;#include iostream:这是一个头文件库,将功能导入到程序中。该命令的含义是程序从名为iostream的文件中导入内容,该文件代表输入和输出流。
using namespace std:指来自标准库(std)的对象和变量名称,通常缩写为关键字std 和运算符:
int main ( ): 指定主函数。函数是C++ 程序的重要组成部分,因为它们在代码中定义操作,并且将执行括号{ } 中的代码。
cout(发音为see-out):是一个定义输出的对象,输出是代码中的字符串。 Hello World 将在这里输出。
return 0:指示程序不返回任何内容,并且文本字符串将是唯一的输出。
: 是用于命名对象的运算符,并且; (分号冒号)用作一行代码的结束标识符。
将它们放在一起形成完整的C++ 代码。
这段简短的代码简单地涵盖了C++ 中的一些基本语法。如果不先学习基本语法,这段代码就像是从天上读来的,你不会知道它在做什么?这是什么意思?
如果你懂得基本语法,你就能像看一段中文一样轻松地理解它的意思。
基本语法只是入门的一方面。此外,您还需要对以下内容有基本的了解:
函数- 函数是一组一起执行任务的语句,每个C++ 程序都至少有一个函数数组- 数组是一种数据结构,用于存储相似元素的固定大小的顺序集合字符串- 字符字符串是一维字符数组,以空字符’/0′ 结尾指针- 指针是其值是其他变量的地址的变量。指针有助于更轻松地执行C++ 任务,并且有些任务没有它们就无法执行。引用是别名,是已经存在的变量的另一个名称。如果引用被初始化为变量,则变量的名称和引用的名称可以互换使用来引用变量类和对象- 类是C++ 的一个关键特性,提供了表示数据和操作数据的方法数据。组合成一个包来指定一个对象的形式多态性——多态性意味着具有多种形式。在C++ 中,这指的是调用一个数字函数,该函数会导致执行不同的函数,具体取决于调用该函数的对象的类型。
C++实战
入门C++,学习了一些C++编程技巧之后,接下来要做的就是好好利用它们,在实战中打磨、精通C++。
实现此目的的一种方法是通过做一个项目来了解该语言的各个方面如何组合在一起。
目前Github上有很多相关项目。我们通过阅读相关代码,了解其实现过程,然后自己复现相关项目,可以起到实际作用。
我们还可以根据您感兴趣的领域为您找到一些相关的需求场景,然后通过C++实现相应的工具或软件。
例如,开发一个简单的游戏、实现一个文档翻译工具、开发一个简单的计算器等。
C++进阶
中级和高级C++ 编程以基础知识为基础。
如何理解这些概念,如何使用它们,以及如何在项目中高效应用它们,是走进阶路线时必须学习的。
在进阶的路上,C++程序需要做的不再是如何通过基本语法或面向对象编程来实现一个功能或一个系统,而是学习并精通通用编程和泛型编程。换句话说,它需要考虑代码的通用性和可扩展性,这样才能更好地向后兼容,更容易适应多平台的需求。
学习资源
书籍
《C++ Primer Plus(中文版)》
大多数从事C++开发的同学一定都读过或者至少听说过这本经久不衰的经典书籍。
这是一本全面、详细、权威的C++书籍,对初学者非常友好。即使你没有任何编程基础,阅读过程也不会有太大的障碍。
而且,相比很多资料喜欢给出伪代码,本书给出了大量完整且可执行的代码,对于基础薄弱的同学入门来说非常有良心。
另外,这是一本从更高层次解释C++的书。与很多只解释概念和理论的书籍相比,它从更高层次的角度教授C++。例如,潜在的问题在哪里?哪些方面需要特别注意?它将给出详细的提示和解释。
《C++ Primer(中文版)》
这是一本C++经典书籍,由C++领域三位专家共同撰写:C++大师Stanley B. Lippman、C++标准委员会前任主席Jose Lajoie、C++先驱Barbara E. Moo。 C++。也倾注了三位专家对C++的独特理解。
与很多书上简单的概念叙述相比,《C++ Primer(中文版)》从因果、由浅到深、从表到里,从语言的简单用法到为什么要这样设计语言,你不仅可以学习从语言使用者的角度看问题,从语言设计者的角度思考这个语言的设计利弊。
而且,本书还可以作为参考词典。您可以在这里找到日常C++开发过程中遇到的许多语法和编译问题的答案。
与全面、厚重的
《Essential C++中文版》
和《C++ Primer Plus(中文版)》相比,《C++ Primer(中文版)》就显得“薄”了很多。
相比前两本书的全面性,本书更注重C++高级部分的讲解。全书重点关注过程型(process-orientation)、泛型(generic)、基于对象(object-based)、面向对象(orientation)。 Object)分4个方面详细解释。从这里,你可以学到很多C++的高级用法。
《C++标准库》
标准库是C++非常重要的一部分,也是C++开发中不可避免的一部分。
《Essential C++中文版》 本书详细讲解了每个标准库组件,包括其设计目的和方法、复杂概念的分析、实用高效的编程细节、存在的陷阱、重要的类和函数,此外还有大量实际实现的代码示例使用C++11 标准,涵盖新组件和功能。
本书重点介绍标准模板库(STL),涵盖容器、迭代器、函数对象和STL算法。
《Effective C++:改善程序与设计的55个具体做法》
这是世界著名C++软件开发专家Scott Meyers的经典著作。这本书更像是经验的积累。
《More Effective C++(中文版)》
这是Effective C++ 的续集,由Scott Meyers 于1996 年推出。它也比《C++ 标准库》 更先进。
本书比较适合有一定经验的C++开发人员,但对于C++初学者来说有一定难度。
视频课程
其实,学习C++,仔细阅读上面介绍的6本书就足够了。
然而,不同的学生有不同的学习偏好。有些学生喜欢通过阅读书籍来学习新知识,而另一些学生则喜欢看视频。
因此,这里向您推荐两门视频课程,都是免费的。
《面向对象程序设计-C++》
内容包括基础理论、类和对象、构造和清理、函数、引用、继承和多态、复制构造、运算符重载、异常、模板和流等。课程涵盖汇编、操作系统等知识一种简单易懂的方式。在这门课程中你可以看到很多对上述经典书籍的参考,可以说是一门比较用心的课程。
《C++教程:从0到1入门编程》面向对象程序设计-C++ – 网易云课堂《C++教程:从0到1入门编程》
B站热门C++视频课程,浏览量超过1500万次。从基础语法到高级知识,从概念理解到动手实践,没有多余的废话,视频教程纯属实用。非常适合初学者。
开源项目
我个人认为开源项目是学习编程语言非常快速有效的方式。
得益于强大的Github,提供了许多优质的开源项目。在这些项目中,我们可以学习那些优秀程序员的编码方法,学习、借鉴他们的编程模式。我们也可以从这些项目中得到一些启发,做一些实际的项目。让我们远离书本上的理论知识,走向贴近实际场景的项目。让我们的技术得到升华和完善。让我们从一个普通的C++程序员进阶到一个高级的C++程序员。
interview
星级:24.4k
C/C++技术面试基础知识总结,包括语言、程序库、数据结构、算法、系统、网络、链接加载库等。
这是一个比较适合初学者的C++项目。收集了面试过程中一些与C++相关的问题和答案。相比书本上的内容,这些知识更适合实际的项目实践,在实际项目中经常会遇到。问题。
因此,这个项目让我们脱离书本和教程,学习到很多有实用价值的C++知识和技能。
tinytetris
星级:1.7k
这是一个用C++ 实现的小型俄罗斯方块项目。与那些大型项目相比,这个项目对于初学者来说更容易,并且将C++与熟悉的游戏开发有机地结合在一起,这会给学习者更直观的体验。它还具有较强的沉浸感,可以吸引学习者对程序设计过程的注意力。例如,如何实现块图像?如何实现块的移动和选择?如何实现剔除和积分功能?
这些提出的问题都可以在这个小项目中得到解答。
MyTinySTL
星级:6.3k
前面介绍过,STL是C++非常重要的一部分,也是学习C++时绕不开的一个概念。
MyTinySTL使用代码示例和详细的解释让初学者更加了解STL的用法。对于刚学完基础知识、想夯实基础的学生来说非常有价值。
到目前为止,我已经介绍了几个比较适合初学者的开源项目。这些比较适合刚刚放下书本,需要用一些实际项目来练习技能,提高对理论知识的印象和理解的学生。这里有一些高级的实践项目。开源项目。
Cytopia
星级:1.4k
Cytopia 是一款免费、开源的复古像素艺术城市建设游戏,由基于SDL2 的自定义等距渲染引擎提供支持。
该项目涉及游戏开发的诸多关键因素,如渲染引擎、UI系统、摄像机平移和缩放、地形操纵、音效等。
这是一个比较完整、内容丰富的开源项目。对游戏开发感兴趣的同学可以详细了解一下。
OpenTTD
星级:4.1k
OpenTTD 是一款交通模拟游戏,基于Chris Sawyer 编写的热门游戏Transport Tycoon Deluxe。
它试图尽可能地模仿原始游戏,同时用新功能扩展它。
OpenTTD 根据GNU 通用公共许可证2.0 版获得许可,但包括一些根据不同许可证获得许可的第三方软件。
devilutionX
星级:5.8k
devilutionX 是《Effective C++》 和《暗黑破坏神》 的源端口,它致力于使游戏运行变得简单,同时提供引擎改进、错误修复和一些可选的生活质量功能。
calculator
星级:25k
Calculator 是一个用C++ 编写的Windows 计算器程序,预装在Windows 中。
没错,就是我们现在在Windows操作系统中使用的计算器。
该应用程序提供标准计算器、科学计算器和编程计算器的功能,以及一组各种测量单位和货币之间的转换器。
DearPyGui
星级:7.9k
DearPYGui 是一个快速且强大的Python 图形用户界面工具包,使用C++ 开发,具有最小的依赖性。
在这个项目中,你可以学习如何使用C++实现UI界面以及开发图形图像。
Clementine
星级:3.2k
Clementine 是一款适用于Windows、Linux 和macOS 的现代音乐播放器和库组织工具。
通过这个项目,我们可以学习如何通过C++处理音频文件,并实现文件的组织和管理。
zeal
星级:9.6k
用户评论
爱到伤肺i
哇,这篇教程真的太全面了!我刚刚开始学C++,这种系统的学习路径对我来说简直是救星。
有20位网友表示赞同!
苏樱凉
看了这篇全面的学习C++文章,感觉自己对C++的理解又提升了一个层次,谢谢分享!
有20位网友表示赞同!
无寒
太棒了,这种系统的学习计划,对于初学者来说真的很有帮助,我打算按照这个步骤来学习。
有18位网友表示赞同!
关于道别
文章写得很详细,但是我觉得对于完全没有基础的人来说,可能还需要一些基础的概念解释。
有5位网友表示赞同!
龙吟凤
全面是全面了,但是感觉对C++的进阶内容涉及不多,对于有一定基础的人来说可能不够用。
有8位网友表示赞同!
折木
这篇教程太全面了,收藏了!我觉得对于不同阶段的学习者来说,都能找到适合自己的学习路径。
有11位网友表示赞同!
微信名字
学习了C++一段时间,感觉还是有点迷茫,这篇全面的学习文章给了我明确的方向。
有18位网友表示赞同!
抓不住i
全面学习C++的文章,对于我这种自学者来说,简直就是宝藏!感谢分享!
有20位网友表示赞同!
我的黑色迷你裙
太实用了,这种系统的学习计划,我觉得应该推荐给所有学习C++的朋友。
有11位网友表示赞同!
軨倾词
虽然文章很全面,但是我觉得对于实际操作的部分可以再多一些实例,这样更容易理解。
有15位网友表示赞同!
发型不乱一切好办
文章内容全面,但是读起来有点枯燥,能不能加入一些实际案例,让学习过程更有趣呢?
有6位网友表示赞同!
非想
系统学习C++的语言,这篇教程真的让我受益匪浅,特别是那些实用的编程技巧。
有5位网友表示赞同!
何必锁我心
全面学习C++,这篇文章让我看到了C++的广阔天地,感谢作者为我们整理了这么丰富的内容。
有6位网友表示赞同!
笑傲苍穹
全面是全面了,但是感觉对C++的一些高级特性介绍得不够深入,希望后续能补充。
有8位网友表示赞同!
江山策
系统学习C++,这篇文章给了我很大的帮助,我会按照这个计划一步一步来的。
有13位网友表示赞同!
Hello爱情风
全面学习C++,这篇文章让我看到了C++的魅力,我已经开始期待自己的C++之旅了。
有9位网友表示赞同!
ˉ夨落旳尐孩。
感觉这篇文章对于初学者来说有点复杂,如果能分几个阶段来讲解,那就更完美了。
有16位网友表示赞同!
灼痛
全面学习C++的文章,我觉得对于想入门的朋友来说,是不错的选择,不过对于进阶学习可能还不够。
有14位网友表示赞同!
命硬
文章内容全面,不过我觉得对于C++的内存管理部分可以再详细一些,这是学习C++的重要环节。
有6位网友表示赞同!