原文:jianshu.com/p/a8c3a44f57ef
《C++探索之旅》全系列内容简介前言什么是 C++什么是程序编程语言C++ 与其他语言的比较C++ 的历史C++ 经典书籍总结第一部分第二课预告1. 前言
亲爱的读者,你是否对 C++ 感兴趣,但因为 C++ 看起来很难,或者别人对你说 C++ 挺难的,你不知道如何下口,哦,不,是如何下手?
别担心,这个系列教程就是为 C++ 初学者准备的。当然了,此课程也适合进阶。
不可否认,C++ 是一门非常著名的语言。几乎学计算机的同学都难免会接触一下 C++,中国的计算机编程课一般也是先学 C 语言入门,然后学 Java 或 C++。
当然了,现在有的同学第一门编程语言也有直接学 Python 的。可以参看我的《Python探索之旅》 系列教程。
C++ 这门语言的使用很广泛,特别是在游戏开发领域,C++ 的性能和无限可能性使得其几乎独占鳌头。
我们经常听到说 C++ 是 C 语言的后继。实际上,这两门语言虽然有点像,但还是不一样的。C++ 加入了很多新的特性,比如面向对象编程(Object-Oriented Programmation,缩写为 OOP)。
我一直觉得:学编程,第一门语言最好是 C语言。我之前写过一篇文章:第一门编程语言选什么好? 。有兴趣的朋友也可以学习我的 《C语言探索之旅》 系列教程。
当然有的朋友见解不同,觉得 Python,Java 等相对比较好上手的语言更适合。
C,C++,Java 这三门语言是可以做到相辅相成,融会贯通的。事实上,C++ 的发明受了 C 语言的启发,而 Java 的发明又受了 C++ 的启发。
之后我也会写Java探索之旅系列。
个人认为:
有了 C 语言的基础,再去学 C++ 和 Java,会轻松很多。
当然,如果你有余力学一下汇编语言,那会更有帮助,请参见我的 学习汇编对编程有什么帮助?如何学习 。
在这个系列课程中,我们不仅会一点点带大家领略 C++ 的奇妙之处,后面还将带大家来探索一个 C++ 的库:Qt。
Qt 这个库非常强大,已经超越了一个库单纯的范畴,甚至可以说是一套体系。在嵌入式领域,Qt 也大有可为。Qt 开发也非常方便,独有的“信号-槽”的机制可以大大加快开发速度。
如果当年诺基亚没有抛弃 Qt,用 Qt 设计的 Meego 系统来搭载手机而不是弃 Intel(英特尔)转投入“霸道总裁” Microsoft(微软)的怀抱,那也许 C++ 目前会更火。2. 什么是 C++
C++ 一般我们也可以写成 CPP,或者 C Plus Plus( Plus 表示“加上,更多”的意思)。所以从名字上我们就可以看出一点端倪。
既然我们有 C语言,那 C++ 岂不是意味着“在 C语言的基础上再多加了一些东西”么?
其实是可以这样理解的,虽然我们一般还是会把 C 语言和 C++ 看成两门不同的语言。但是确实 C++ 的发明受了 C 语言的启发。
读者朋友,如果你还有兴趣继续看下去,说明你对编程有一定热情,或者有兴趣想学习编程试试。
几年前网上有一个视频,是微软创始人 比尔·盖茨、Facebook 创始人马克·扎克伯格、Twitter 联合创始人杰克·多西以及 Dropbox 联合创始人兼 CEO Drew Houston 和 Zappos CEO 谢家华 等,同时也包括了体育界和政界的一些明星,比如 NBA 迈阿密热火队球星 克里斯·波什 和美国前总统 克林顿 和副总统 戈尔 等联合录制的一个视频,鼓励全民学编程。
编程其实没有那么难,确实人人都可以学编程的,现在编程的门槛越来越低了,网上好的教程和资源太多。新的编程语言也设计得越来越符合人的思维,简单易用。
在这一课里,我们会尝试解答大家初遇 C++ 的一些问题。
不过不要忘了,这个课程是给初学者的,所以即使你从来没有写过一行代码,也不知道编程和程序是什么,你也不需要担心,。
可以说这个系列课程不需要你预先有任何编程知识,只需要你有阅读的能力。
我们就是从零开始。当然,如果你有编程基础,那这个 C++ 的课程会更容易学。
唯一需要大家做到的,就是循序渐进地学习这个系列课程,并且认真独立完成我们的各种练习题和项目。
准备好了么?C++ 这座“太行王屋山”,我们来征服它吧!
3. 什么是程序
程序(英语是 program)是信息技术的基础。你在电脑上可以做各种操作,就要归功于运行在电脑里的各种程序。
在我的 C语言探索之旅 | 第一部分第一课:什么是编程? 里已经做了比较详细的介绍了,但是因为这个 C++ 的系列教程是面向初学者的,所以我不厌其烦地再讲一遍。我尽量不重复。
我们先看以下截图:
上面的截图,是我在 Windows 操作系统里截取的。
可以看到,我们这里打开了三个不同的窗口,其实就对应了三个不同的程序:
我们可以看到,这三个程序设计的目的都是很明确的,各司其职:浏览器负责上网浏览网页,文件管理器管理电脑的文件,记事本使我们可以编辑文档。
我们也可以举一些大家熟悉的游戏,比如超级玛丽(SuperMario),百战天虫(Worms。非常好玩的游戏,初中时玩过),星际争霸( StarCraft ),等等。这些也都是程序。
上面的截图就是星际争霸的游戏画面。怎么样?很酷炫吧。是不是也想要学好编程去开发游戏了?
当然了,现在随着 Unity 3D 的崛起,开发游戏比以前容易多了。
星际争霸 2 的地图编辑器就是用 C / C++ 来写的。而一般编写单机 PC / 主机游戏现在都是 C++ 加上一个脚本语言(比如 Lua,这地方不需要脚本引擎多么高性能,够用就好)。
所以,是不是对于 C++ 的兴趣又浓厚了一点呢?当然,游戏,我们开发是好,玩游戏丧志我们是绝对不推荐的。
我们上面举了三个程序的例子,又给大家看了一个星际争霸(也是程序)的游戏截图。可能大家会认为,程序就是都能看得见的。但其实并不尽然,并不是所有程序都是可见的。
比如一些后台运行的服务(service),或者很多系统程序(比如防火墙,等等)都是不可见的。虽然不可见,但是这些程序还是兢兢业业地为你工作噢。
虽然上面的星际争霸的截图可能让你很想马上学会 C++ 编程,然后开发属于自己的游戏。但是不要急,一口气是吃不成一个胖子的,只能吹胀一头牛。
像星际争霸这样复杂的大型游戏,需要十多个人(不都是编程,也需要美工,动画制作等)全时间工作几年才能开发出来。所以一开始我们要有耐心,可以从一些小程序开始(游戏是一种程序)。
在这个系列课程中,我会带大家一起开发一些 C++ 程序,也会有游戏。
4. 编程语言
你的计算机(computer,也称为“电脑”)真的是一个奇怪又复杂的家伙,这样说已经算很给它面子了。
我们给它传递命令,只能输送给它 0 或 1(因为电脑里面有大大小小的数不胜数的晶体管,而它们被用来做“开关”,0 和 1 正好可以用来表示“关闭”或“开启”这两个状态,所以电脑最底层其实都是 0 和 1 这样的二进制码)。
打个比方,我要让电脑做以下的事:“为我打开一个文件夹”。我实际上输给电脑的是(是我随便写的,我并不知道怎么转换这句话到二进制码):
010100111011001100111101010
正如你看到的,这就是你的电脑所会的语言,被称为“二进制语言”。它也只会这门语言。可以看到,这门语言完全不容易理解。
所以,我们的第一个真正的问题来了:“怎么和电脑对话呢?难道只能用 0 和 1 吗?”
你的电脑既不讲中文也不讲英语。难道我们也要学这门“二进制语言”吗?
幸亏不必。假如用这门语言编写星际争霸这样的游戏,那大概需要一百年吧…
为了简单起见,我们的计算机先驱们就想到:先用其他简单一些、便于理解的语言(有点像中间人那样)编写程序,之后再把它翻译成电脑的二进制语言。
这类语言就被统称为“编程语言”。
当然最不容易的,就是要编写这样一个“翻译”程序。幸亏计算机先驱们已经把这样的翻译程序写好了,我们也没必要重新做了(着实松了一口气)。
所以我们要做的就是告诉电脑:“为我打开一个文件夹”,这句话会被翻译成电脑的二进制码:
010100111011001100111101010
今天,全球存在上百种编程语言,如果你百度或者 Google 一下,就可以找到一个编程语言的列表。
我们就不一一列举了。这些编程语言不尽相同,各有特色,但是都有一个共同的目的:使我们可以用比二进制码更简单的方式和电脑“对话”。
一般的编程语言都是这样工作的:
我们用一门编程语言(例如 C++ )的指令来写我们的程序(源代码)。这些源代码被一个“翻译”程序翻译成电脑能理解的二进制码。电脑就能读取最终的二进制码,来执行我们要它执行的事啦。
我们用一张图来总结一下:
这个“翻译”程序的正式名字是:编译器(compiler)。这是一个必不可少的工具(当然,对于解释型语言,如 Python,就需要解释器了。我们暂不深究,大家可以百度一下:编译型语言和解释型语言。但其实最基本的原理是一样的:都需要一个“翻译”程序把源代码翻译成二进制码)。
那么,我们如何在这上百种编程语言中选取一种来学习呢?哪一个是最好的呢?C++ 是好的选择吗?
其实,一个程序员通常会几种编程语言,很少有只会一种的。
就好像我们中国人会说中文,但一般也会英语吧。有的人更厉害,会好几种语言。
当然了,初学编程,我们并不需要几种语言同时一起学,那会分散注意力。
一开始,我们只要学一种就好了,等融会贯通了以后,学其他的就简便很多。比如你英语好,那么学法语就会比只会中文的人更轻松。
好消息是你可以随自己喜欢,想先学哪种编程语言就先学哪种。虽然我个人推荐先从 C 语言开始,当然从 C++ 或 Java 开始也未尝不可。你从 Python 开始也可以。
不过既然这个系列课程是关于 C++ 的,那么我们就来看看 C++ 相比于其他编程语言的独有特色吧。
5. C++ 与其他语言的比较
在上百种编程语言中,不可讳言,有些确实比较著名,而有些却几乎无人问津。
这和人类的语言是类似的:总有那么几种语言如英语,法语,西班牙语,德语,日语,中文,是比较流行的,而爪哇语,毛里求斯语,或者非洲某部落的语言,就很少有人学习了。
C++ 毫无疑问是最流行的编程语言之一,常年位于编程语言排行榜前五名。
著名的编程语言排行榜 TIOBE 在 2020 年 6 月的榜单:
TIOBE 排行榜是根据互联网上有经验的程序员、课程和第三方厂商的数量,并使用搜索引擎(如 Google、Bing、Yahoo!)以及Wikipedia、Amazon、YouTube 统计出排名数据,只是反映某个编程语言的热门程度,并不能说明一门编程语言好不好,或者一门语言所编写的代码数量多少。
那么问题来了:是否应该将一门语言的流行程度作为编程首选语言的考虑因素呢?
虽然并不是一定的,但确是一个考量因素。因为有些语言很有意思或者设计得很好,但使用得不是太多,比如 Lisp 语言。
如果一门编程语言使用不广泛,就有个缺点:“技术支持少,不容易找到能为你答疑解惑的人”。
这也是 C++ 适合作为首选的几门语言之一的原因。你在这条学习路上不会孤单,有很多仁人志士都已经“上了贼船”,随时为你保驾护航。
当然了,除了流行性,编程语言之间的比较还有另一个标准:高级语言还是低级语言。
我们说有些语言是高级语言,另一些则是低级语言。
这里的“高级”与“低级”并不是好与不好的区别,而是偏离二进制码(电脑的机器语言)越远就越高级,越接近人类思维模式就越高级。
一般来说,高级语言使用更简便,编程更快捷。而低级语言往往相对难一些,不过更易于控制电脑。所以说这是双刃剑。
那么 C++ 呢?
可以把 C++ 归为“低级语言”。再声明一次,这决不是说它比较低等。你想把它归为“高级语言”也没有关系。
“高级语言”和“低级语言”是一种比较而言,如果和二进制码或者汇编语言相比,那么 C 语言和 C++ 也算是高级语言了。
虽然说 C++ 编程可以是很复杂的,但是 C++ 却非常强大,而且运行速度很快。
下图是一个语言层次的展示:
可以看到,在上图中,有一种语言最接近机器的二进制码语言,那就是汇编(Assembly ),也是大家有空值得学习的语言。
学习汇编不需要太深入,入门就好,可以使你更好地理解内存机制,指针是怎么回事,还有电脑工作的一些原理。
推荐王爽老师的 《汇编语言》 这本书,写得很好。不枯燥,而且由浅入深。
C++ 的优势
当然,说了这么多 C++ 的优点,并不是说 C++ 就没有缺陷。它也有自己的缺点,特别是其复杂性。可以说 C++ 是目前最复杂的编程语言。就像 C 语言有不少缺陷和陷阱一样,建议阅读 《C陷阱与缺陷》 一书。
正如上面所说,C++ 算是和 C 语言一样比较偏底层的语言,这也给了我们直接操作内存的能力。但是“能力越大,责任越大”。假如未能正确使用 C++,那么我们的程序很容易卡死或者潜伏危机。
但也没什么好怕的,这个系列课程就是为了让大家能够很好地控制
C++ 这个很厉害的“熊孩子”,让它成为“功夫熊猫”。
C++ 程序之初见
为了给大家展示 C++ 程序到底大致是个啥样子,我们就给出一段 C++ 代码,是最基本的:在屏幕上显示 Hello World 这两个英文单词(也就是“你好,世界”):
#include
using namespace std;
int main()
{
cout << "Hello World!" << endl;
return 0;
}
是不是和 C 语言的 Hello World 例程很像呢?
6. C++的历史
要说 C++ 的历史,就先要回顾一下编程的历史。编程的历史虽然不是 long long time ago(很久很久以前),那也是 long time ago(很久以前)了。
一开始,计算机先驱们编程的时候,可没有今天那么好的条件呀。那时候哪有鼠标和键盘,只能用“打孔卡”这样的东西:
打孔卡是一块纸板,在预先知道的位置利用打洞与不打洞(表示开和关,类似 0 和 1 的二进制码)来表示数字消息。
发表评论