我是Jackpop,我们交个朋友吧!
C++是一种通用的、面向工具的编程措辞,可用于开拓操作系统、游戏、图形用户界面、后端以及高性能系统和运用程序。
以是,只管Python、Go这些后起之秀近几年热度非常高,但是在很多领域还是无法撼动C++的地位。

本日,就从浅到深,从入门到实战,教你如何学习C++。
篇幅较长,先给出本文的目录:
C++简介什么是C++?为什么学C++?C++的历史C和C++的差异编译型措辞和解释型措辞从入门到实战开拓环境C++入门C++练习C++实战C++进阶学习资源书本视频课程开源项目下面,就正式开始本文的正式内容吧!
现如今,盛行的编程措辞非常多,Python、Go、Java、PHP、JavaScript等等,它们各有自己善于的领域和方向。
而C++则在系统资源和内存掌握更胜一筹,因此,在操作系统、图形图像、游戏、嵌入式这些对性能哀求较高的领域,C++一贯都具有不可替代的地位。
它可以用来开拓在多个平台上运行的运用程序,如做事器、个人电脑、基于云的系统和移动设备。
为什么学C++?如果你对打算机游戏、高端打算项目的软件工程、加密货币挖矿程序和开拓移动设备的操作系统等领域感兴趣,学习C++则是必不可少的。
此外,相对付Go、Python这些更加高阶的编程措辞,会涵盖更加全面的编程知识,也有助于学习者理解变量、函数、面向工具、指针、内存...这些在很多高阶措辞中随意马虎被忽略的观点和知识。
C++的历史
C++是由丹麦打算机科学家Bjarne Stroustrup(比雅尼·斯特劳斯特鲁普)创造、设计和开拓的。
斯特鲁斯特鲁普想制造一种类似于C措辞的灵巧和动态的措辞,但是,须要拥有更多的功能。
它最初被称为 "C with classes",在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可以选择Codeblocks IDE或Eclipse CDT在Linux。
macOS在Mac上,你可以利用Clang或GCC,两者都是免费的。
虽然GCC支持更广泛的C和C++标准,但Clang在大多数情形下都能正常事情。
可以利用Homebrew安装GCC:
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 <iostream>using namespace 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++ Crash Course》一书的作者Lospinoso说,在中级阶段,程序员须要理解引用和指针如何事情。支撑最强大的C++功能的其他核心观点,例如,工具生命周期和多态。
对这些观点如何理解、如何利用,以及如何高效的运用于项目中,则是走上进阶路线上必须学会的。
在进阶之路上,一个C++程序要做的就不再是如何通过基本语法或者面向工具编程去实现一项功能或者一个别系,而是学会并闇练通用编程、泛型编程,也便是说,须要考虑代码的通用性、可扩展性,以便后续可以更好的向后兼容,以及更加随意马虎适应多平台的需求。
学习资源书本《C++ Primer Plus(中文版)》想必绝大多数从事C++开拓的同学都看过,至少听过这本耐久不衰的经典书本。
这是一本全面、细致、威信的C++书本,对零根本小白非常友好,即便没有任何编程根本,在阅读过程中也不会有太大障碍。
而且,相对付很多数据喜好给出伪代码,这本书中给出大量完全、可实行的代码,这对付根本较弱的同学上手演习非常良心。
此外,这是一本站在更高层次讲解C++的书本,比拟很多书本一味的讲解观点和理论,它用更高层次的视角教授C++,比如,哪里有潜在问题?哪些地方须要着重把稳?它都会给出详细的提示和阐述。
《C++ Primer(中文版)》C++大师StanleyB.Lippman、C++标准委员会原卖力人JoséeLajoie、C++先驱BarbaraE.Moo三位C++领域大牛合著的一本经典C++书本,也倾注了三位大牛对C++独特的理解。
相对付很多书本纯挚的观点讲述,《C++ Primer(中文版)》从因到果,由浅入深,由表及里娓娓道来,从措辞的大略用法,到为什么这样设计措辞,你不仅能从一个措辞利用者的角度看问题,更能站在一个措辞设计者的角度思考这种措辞的设计利害。
而且,这本书完备可以作为一个参考字典利用,在日常C++开拓过程中碰着的很多语法和编译问题在这里都可以探求到答案。
《Essential C++中文版》相对付《C++ Primer Plus(中文版)》和《C++ Primer(中文版)》的全面而厚重,《Essential C++中文版》显得”轻薄“很多。
相对付前两本的全面,这本书更加看重C++进阶部门的讲解,全书环绕procedural(面向过程的)、generic(泛型的)、object-based(基于工具的)、object-oriented(面向工具的)着4个面向进行详解,从这里,你可以学到很多C++的高阶用法
《C++标准库》标准库是C++一个非常主要的组成部分,在C++开拓中也是无法绕开的一个部分。
《C++ 标准库》这本书详细讲解了每一标准库组件,包括其设计目的和方法、繁芜观点的阐发、实用而高效的编程细节、存在的陷阱、主要的类和函数,除此之外,还大量用 C++11 标准实现的实用代码范例,覆盖全新组件、特性。
这本书重点着眼于标准模板库(STL),涉及容器、迭代器、函数工具以及 STL 算法。
《Effective C++:改进程序与设计的55个详细做法》这是一本来自全天下有名C++软件开拓专家Scott Meyers的经典书本,这本书更像是一本履历的积淀。
如果你想沿着C++的方向一贯走下去,我建议《Effective C++》一定要读,它提炼和升华了作者在C++开拓过程中多年的实战履历,这些都是C++程序设计和优化过程中宝贵的履历,也是普通程序员和高阶程序员之间差距的关键所在。
《More Effective C++(中文版)》这是继Effective C++之后,Scott Meyers于1996推出这本续作,相对付《Effective C++》也更加高阶。
这本书比较适宜有一定履历的C++开拓职员,对付C++初学者有一定难度。
视频课程实在,仔细阅读上面先容的6本书本对付C++的学习就已经足够了。
但是,不同同学有不同的学习偏好,有的同学喜好通过看书学习新知识,有的同学则更加方向看视频。
以是,这里也给大家推举两个视频课程,都是免费的。
《面向工具程序设计-C++》内容包括基本理论、类与工具、布局与打消、函数、引用、继续与多态、拷贝布局、运算符重载、非常、模板和流等,课程中贯通汇编、操作系统等知识,深入浅出,在这个课程里可以看到很多有关上面这些经典书本的影子,可以说是一份比较存心的课程。
《C++教程:从0到1入门编程》面向工具程序设计-C++ - 网易云教室《C++教程:从0到1入门编程》B站上一个颇受欢迎的C++视频课程,目前播放量已经超过1500万,从基本语法到进阶知识,从观点理解到动手实践,没有多余的话术,纯干货的视频教程,对初学者非常友好。
开源项目我个人认为,开源项目是学习一门编程措辞非常快捷且行之有效的方法。
得益于强大的Github,供应了很多开源优质的项目,在这些项目中,我们可以学习那些精良程序员的编码办法、学习并借鉴它们的程序设计模式。还能够从这些项目中得到一些灵感,去动手做一些实战项目,让我们从书本的理论知识中走出来,走向贴近实际场景的项目,让我们的技能得到升华可提炼,让我们从一个普通C++程序员进阶到一个高阶C++程序员。
interviewStar:24.4k
C/C++ 技能口试根本知识总结,包括措辞、程序库、数据构造、算法、系统、网络、链接装载库等知识。
这是一个比较适宜初学者的C++项目,沉淀了口试过程中C++干系的一些问题和解答,这些知识相对付书本上的内容,更加贴合项目实战,每每都是实际项目中会碰着的一些问题。
因此,这个项目可以让我们分开书本和教程,学到很多有实战代价的C++知识和技巧。
tinytetrisStar:1.7k
这是一个利用C++实现的俄罗斯方块的小项目,相对付那些大型项目,这个项目对初学者比较轻松,而且把C++和耳熟能详的游戏开拓有机的结合到一起,这会让学习者有更加直不雅观的感想熏染,也有更加强烈的代入感,能够把学习者的把稳力吸引到程序的设计过程中。例如,如何实现方块图像?如何实现方块的移动和选择?如何实现肃清和积分功能?
这些抛出的问题在这个小项目中都可以找到解答。
MyTinySTLStar:6.3k
就犹如前面先容的那样,STL是C++中很主要的组成部分,是学习C++无法绕开的观点。
MyTinySTL通过一个个代码示例,配以详细的注释详解,让初学者更加清楚STL的用法,对付刚学完根本知识想要夯实根本的同学非常有代价。
到这里,先容了几个比较适宜初学者的开源项目,这些比较适宜刚撇下书本,须要用一些实战项目来练手、提升自己对理论知识印象和理解的同学,下面再先容几个进阶实战的开源项目。
CytopiaStar:1.4k
Cytopia是一个免费的、开源的复古像素艺术城市培植游戏,它采取了基于SDL2的自定义等距渲染引擎。
在这个项目中涉及到游戏开拓中的很多关键成分,例如,渲染引擎、UI系统、摄像机平移缩放、地形操作、声音效果等等。
这是一个比较完全且丰富的开源项目,对游戏开拓感兴趣的同学可以深入学习一下。
OpenTTDStar:4.1k
OpenTTD是一款运输仿照游戏,基于Chris Sawyer编写的盛行游戏Transport Tycoon Deluxe。
它试图尽可能地模拟原来的游戏,同时用新的功能来扩展它。
OpenTTD采取GNU通用公共容许证2.0版,但包括一些采取不同容许证的第三方软件。
devilutionXStar:5.8k
devilutionX是《暗黑毁坏神》和《地狱之火》的源码移植,它努力使游戏的运行变得大略,同时供应引擎改进、缺点修复和一些可选的生活质量功能。
calculatorStar:25k
calculator是一个用C++编写的Windows打算器程序,预装在Windows中。
没错,便是我们现在在Windows操作系统中利用的那个打算器。
该运用程序供应了标准、科学和程序员打算器的功能,以及一组各种丈量单位和货币之间的转换器。
DearPyGuiStar:7.9k
DearPYGui是一款用C++开拓,适用于Python的快速而强大的图形用户界面临象包,具有最小的依赖性。
在这个项目中,可以学习如何利用C++实现UI界面,进行图形图像的开拓。
ClementineStar:3.2k
Clementine是一款适用于Windows、Linux和macOS的当代音乐播放器和资料库组织工具。
通过这个项目,我们可以学习如何通过C++处理音频文件,以及实现文件的组织与管理。
zealStar:9.6k
zeal是一款由C++开拓的离线文档浏览和阅读工具,通过这个项目会涉及到Qt、cmake、libarchive、SQLite等工具的用法。
开源项目这里,我共先容了10个项目,涉及到实战知识、游戏开拓、用户界面、游戏引擎、媒体播放、文档工具,有比较适宜初学者的,也有适宜C++进阶的,大家可以根据自己感兴趣的方向选择适宜的项目进行深入理解和学习!