我开发了一个基于 Beancount 的账本托管服务 HostedBeans,欢迎大家来了解纯文本复式记账并试用我的服务。
查看源代码

C++ 讲稿 1.预备知识

By 精英王子

CC-BY-NC-SA(署名-非商业性使用-以相同方式共享) 3.0

注:解说在图片下方

原始幻灯片(持续更新):https://docs.google.com/presentation/d/1DdrpO1IJN0n493ZpwnjFftwgSZOmXtL95E3ZtDFnfqc/edit

解说写在讲者备注

附带的演示用文件:https://docs.google.com/open?id=0Bw3FV-5YeU2wWTRwNVNrazhLNlk

1

C++的英文名C Plus Plus,有时也简写做CPP.

万事开头难,也许有的人有兴趣学习编程,但是不知道从哪入手,于是就搁置了下来,今天我就给大家一个了解编程的机会,带领大家入门。

不得不说各位对计算机的了解很少,如果我提到的某个词你没听说过,或者不理解,请随时提问,我来解释。

可以说我对我在C++方面的知识很有信心,其他编程语言也略有涉及,大家有问题可以随时问我,我几乎每天晚上QQ都会在线.

2

众所周知计算机只能理解二进制的指令(这是十六进制的形式,本质也是二进制),而且甚至每个型号的计算机的指令都不一样。.

在计算机被发明的前几十年里,程序员只能通过这样方式与计算机沟通。

这意味着搞编程的人都会疯掉的。

3

被机器码搞疯的人发明了汇编语言。

可以看到,汇编语言中有了比较清晰的结构,可以直接使用十进制的数字,可以直接书写英文单词(比如Hello World),用一些字母缩写代替了二进制的指令。

但是计算机依旧只能理解二进制的指令,所以人们编写了一个程序,用来自动地将汇编语言翻译成机器码,然后交给计算机来执行。

使用汇编语言让程序员方便了很多,但还是有人觉得这样太麻烦。

4

丹尼斯·里奇在1970年发明了C语言,虽然大家可能依旧看不懂,但是C语言已经非常接近自然语言了。很遗憾他在去年(2011年10月12日)这个时候因病去世。

同样,计算机不认识C语言,只认识二进制的机器码指令,所以也需要一个软件将C语言翻译为机器码。

顺便说一下,在汇编语言与C语言之间的时间里,还有很多编程语言被发明出来,不过我们就不一一介绍了。

5

Bjarne Stroustrup觉得C语言用起来很不爽,于是他在C语言的基础上进行了改进,后来称为C++.

可以C++看到和C区别很小,事实上C++是对C的一个扩充,所以绝大部分C代码也可以作为C++代码。

一直以来C和C++(人们常常把他们放在一起讨论)在软件领域具有无可替代的地位,而且这种趋势在今后也会持续下去,C/C++是编程中的必修课程。

这段程序(以及前面的三段程序)的功能是在屏幕上打印”Hello World!”这一行字,翻译成中文就是“你好,世界!”.

丹尼斯·里奇(C语言的发明者)等人所著的计算机程序设计教程《C程序设计语言》(The C Programming Language)中以输出这一行字作为最简单的例子,后来广泛流传,几乎所有编程书籍都以此为例。

6

C++并不属于某个个人或某个组织,任何人都可以去使用它,时间一长就容易出现混乱。

1990年开始ISO(International Organization for Standardization,国际标准化组织)和ANSI(American National Standards Institute,美国国家标准学会)就开始着手将C++的内容进行汇总,指定具有指导意义的“标准”文件,由于C++的内容实在太多,个别部分有很大争议,这项工作历时8年才完成。1998年ISO和ANSI发布了C++的第一个标准C++98.

C++03没有新增内容,只是对C++98中有争议的部分做了修订,并修正了一些漏洞。到目前,C++03是被广泛应用的版本,我们以它为主来了解C++.

C++11是近期才发布的新标准,新增了很多的功能,但是软件厂商还在完善编译器,程序员还在学习,目前应用还不是很广泛,我们会略微提及,但不会太多。

7

没错,C++应用的领域非常广泛,你所使用的软件很大一部分都是由C++编写。尤其是大型游戏,几乎90%以上都是由C++编写。

不光是电脑,包括手机、甚至计算机都有C++的参与。

Windows大部分使用C++编写。

8

演示:运行24.exe

一个算24点的小程序,输入四个数字,输出计算结果为24的算式.

9

应该说我会给大家讲比较前沿、实用的技术,比如新的C++11标准,常见的类库如Boost、Qt等。

在讲C++语法的同时也会研究背后的原理,会很生动、有趣。

这是我这个课程和国内一些比较坑爹的教科书的最大区别。

课程用到的所有文件、幻灯片我都会提供,一般情况下不需要你用笔去记录什么,我也不鼓励这样做。

记忆要建立在理解的基础上。

10

我们编写的代码就叫源代码(Source Code),或者源文件,源文件通过编译器(Compiler)可以翻译成可以运行的程序。

但是这个过程是不可逆的,由程序不能翻译得到源代码。很多商业软件只提供最终的程序,不提供源代码,比如Windows、QQ等。

所以你只能使用这个程序,而不能修改,任何修改都必须修改源文件,然后通过编译器重新生成程序。

也有很多软件在提供程序的同时还会提供源代码,这意味着你可以自由地修改源代码、从而修改程序,改变程序的行为(当然,有时候会受到法律的制约).

这类软件被称为开源软件/自由软件(Free Softwave,这里的free是自由而非免费).

11

前面提到C++不属于任何个人或者公司控制,那么用来从C++翻译到机器码的编译器是由谁编写的呢?

事实上,各大知名的软件公司都各自编写了各自的C++编译器。这三种只是应用比较广泛的,事实上还有很多。

他们都遵守ISO/ANSI指定的C++标准来翻译C++代码,但是也存在一些细微的差别。

GNU即GNU’s Not Unix,是一个递归缩写,这是一个庞大的工程,致力于构建一整套自由软件,G++是它的一部分。

演示:用GCC编译24.cpp

g++ -o 24.exe 24.cpp

即之前那个24点的程序

12

IDE即Integrated Development Environment.

GCC即GNU Compiler Collection,GNU编译套件。

13

本来我是应该让大家自己去它们的官网下载的,但是鉴于这坑爹的网速,我给大家下载好了。

但是我还是要提醒大家,在绝大多数情况下,去官网下载软件才是最方便高效的。

MinGW(GCC)官网:http://www.mingw.org/

这里有个我打包好的版本:https://www.dropbox.com/s/rup6ya4m652k6v6/MinGW-2012.4.26.zip

Qt官网:http://qt-project.org/

需要下载Qt库(Qt libraries)和Qt Creator.

14

15

16

今天讲了很多的东西,很多地方都是一句带过,没有细讲,还有很多的地方我说了“一般情况下”、“通常”。这是因为涉及的领域实在太宽,今后我们会将这节课忽略的各个细节翻出来,研究为什么会是这样,为什么要这样做。

我计划是会讲一学期,不到二十节,这仅仅是C++的一小部分,给大家牵个头。如果有兴趣我们以后就可以聚在一起研究。

有人会问学它有什么用,我也不知道,如果把它当作工作也会是很枯燥的,把它当作兴趣也许会是非常有趣的。我喜欢它的严谨,像数学一样严谨,一就是一,二就是二,确定性是美妙的一件事情。

这一节课我同样学到了很多东西,我以前对很多细节模棱两可,但是为了给大家讲正确的知识,我花了很多时间去查资料,弄懂了以前所不了解的细节。

下一节课的名字叫Hello World,我们会讲这节课提到的几段程序是如何工作的.

撰写评论

如希望撰写评论,请发邮件至 jysperm@gmail.com 并注明文章标题,我会挑选对读者有价值的评论附加到文章末尾。

精子生于 1995 年,英文 ID jysperm.

订阅推送

通过 Telegram Channel 订阅我的博客日志、产品和项目的动态:

王子亭的博客 @ Telegram


通过邮件订阅订阅我的博客日志、产品和项目的动态(历史邮件):

该博客使用基于  Hexo  的  simpleblock  主题。博客内容使用  CC BY-NC-ND  授权发布。最后生成于 2024-04-08.