欢迎回到C++程序设计 接下来 我们要给大家介绍一下程序设计语言的发展历程 以及C++语言的一些特性 首先 什么是程序设计语言呢 程序设计语言是用来编写计算机程序的一个工具 但是 只有用机器语言编写的程序才能被计算机直接执行 其他任何语言编写的程序都需要翻译成机器语言才可以 那么 按照程序设计语言的发展历程 可以分为机器语言 汇编语言 高级语言 这么三类 那么接下来 我们就来看看这三类程序设计语言 首先是机器语言 机器语言是由二进制0和1按一定规则组成的 能被计算机直接理解和执行的指令集合 机器语言中的每一条语句实质上就是一条指令 那么我们说 机器语言对我们普通人看来 就是一长串的0和1组成的01代码 没有任何的意义 因此我们说机器语言是一种难学难懂 并且很复杂的这样一种程序设计语言 那么只有非常专业的专业人士才能够使用这样的语言 但是机器语言也不是一点好处都没有的 我们说机器语言能够被计算机直接所执行 因此机器语言的执行速度是非常快的 并且它所占的存储空间也比较小 好 接下来我们再来看看汇编语言 人们将难懂的机器指令用英文助记符来表示 比如说用add来表示加 用sub来表示减 这样就形成了汇编语言 那么汇编语言从一定程度上克服了机器语言难学难懂的缺点 却保留了机器语言运行速度快 并且占用存储空间少的优点 所以汇编语言到现在为止仍然有人在使用 但是总体来说机器语言仍然属于一个面向机器的 一个低级的程序设计语言 所以它仍然是一个比较难学的一种语言 好 那么最后就是高级程序设计语言了 我们说高级语言它高级在什么地方呢 它就高级在程序设计员完全不需要以计算机的硬件来打交道 也就是说用高级语言编写的程序可以运行在任何配置的计算机上 那么相反的用机器语言和汇编语言编写的程序 就要考虑计算机的硬件配置了 那么硬件配置不一样 那个这个程序也是不一样的 好 那么接下来我们来看一下C++语言的这个发展史 那么首先 1972年C++语言诞生了 它是由美国贝尔实验室的丹尼斯·里奇设计的 最初丹尼斯·里奇设计C语言是为了研制UNIX这个操作系统的 随着UNIX操作系统的广泛使用 C语言的突出优点引起了人们的普遍关注 其功能强大 灵活自由 数据表示丰富 代码运行效率高 可移植信号等等优点使得C语言得到了迅速的发展及普及 但是随着要解决的问题越来越复杂 程序的规模也急剧增大 以结构化和模块化为基础的C语言在软件开发中渐渐显得有些吃力了 同时20世纪80年代兴起的面向对象的程序设计方法逐渐被人们所接受 那么在这样的背景下 贝尔实验室的本·贾尼斯特劳特·斯洛普博士 就开发出了C++语言 下来我们来看一下C++语言发展过程中的一些标志性的事件 第一个就是1979年 一开始这个时期的C++语言还是作为C语言的增强版存在的 那么从给C语言增加类开始 不断的增加各种新的特性 包括什么虚函数 运算幅重载 多重继承 模板 异常等等 直到1998年 国际标准组织和国际电工委员会公开了C++程序设计的国际标准 这个标准就简称为C++98 该标准采用了命名空间 标准模板库 通用算法类和字符串类型等等概念 使得C++语言更为实用 从此C++便成为具有国际标准的程序设计语言了 那么同年 也就是1998年 本贾尼斯特劳特斯卢普还出版了C++程序设计第三版这本书 那么这本书也成为最具权威性的C++学习资料 至今仍被许多程序院学习和使用 到了2003年 又通过了C++标准的第二版 简称C++03标准 这个新版本做出了重大更新 对第一版进行了全面的整理 包括错误的修订 减少多一性等等 那么2011年又发布了最新的标准C++11标准 该标准草案进行了世界范围内的投票 最终投票于2011年8月10日结束 并且所有国家都投出了赞成票 使得C++11已经成为毫无意义的正式的国际标准 好 那么我们从刚才的介绍中可以看到 C++语言和C是密切联系的两种语言 那么它俩之间到底是什么样的一个联系呢 我们这还是简单的看一下 首先 C++保留了C语言原有的所有优点 增加了面向对象的机制 也就是说C++是一个既是面向过程的一个语言 又是一个面向对象的这样一个语言 其次 C++是由C发展而来的 因此与C兼容 相当于C++就是C的一个超级 再有就是用C语言编写的程序 基本上不加修改就可以用于C++ 最后 C++既可用于面向过程的结构化程序设计 又可用于面向对象的程序设计 是一种功能强大的混合性的程序设计语言 那么我们刚才提到过的 C++是对C的一个增强版 这个增强表现在哪个方面呢 那么一个就是在原来面向过程的机制的基础上 对C语言的功能做了不少的扩充 其次就是增加了面向对象的一个机制 所以我们说 我们学C++的过程 其实有一半的时间都是在学习C的这样一个过程 那么下来我们看一下C++语言的字符集 也就是说在C++程序里面 只有这些字符才是合法字符的 没有包含在这些字符里面的都是不合法字符 那么我们这列举的是C++03这个标准的字符集 那么就包括小写字母26个 大写字母26个 数字字符10个 那么其他符号29个 以及空白符5个 那么将来大家编程的时候 所有的文字 所有的符号都是出自于这么5个部分 那么再看一下关键字的一个概念 我们将来会经常用到关键字这个词 那么什么是关键字呢 关键字我们也把它叫做保留字 那么它是C++规定的有特定含义的这样一个词语 那么C++03这个标准定义了63个关键字 主要是关于数据类型和语句的词语 那么我们教材的附录B也给大家列举出了C++03这个标准的所有的关键字 再有就是C++的标识符 什么是标识符呢 我们可以简单的理解标识符就是名字 将来我们在编程的时候 我们要为什么变量 函数 数组等等这些对象给它们起名字 那么怎么样起名字才是合法的名字呢 那么我们看一下C++标识符的这个规则 第一个规则就是标识符只能由大小写字母 数字和下划线这么三个组成部分 并且第一个字符必须是字母和下划线 也就是说第一个字符不能是数字 那么第二个规则就是字母是大小写区分的 即大写字母和小写字母被认为是两个不同的字符 比如我有两个对象 一个叫大A 大写的一个A 一个叫小写的一个A 那么它俩是不同的一个对象 因为它们的名字是不一样的 另外标识符不能是C++语言的关键字 我们不能用C++语言的关键字来作为某一个对象的名字 那么这在C++里面是不允许的 那么我们来看一下合法和不合法的标识符 上面的方框表示的都是合法的标识符 比如说我叫一个A这个名字可以 B可以 SUM可以 TAG DATE也可以 STUDENT ENCOUNT这些呢都属于合法的标识符 那么下来我们看看底下的不合法的标识符不合法在什么地方呢 首先第一个就是一个邮箱的一个地址能不能作为标识符呢 我们说因为它里面反还有@这样一个不合法的字符 我们说标识符只能包括数字字母和下滑线 那么这个@就是不合法的字符 所以这个标识符是不正确的 那么再下来一个8849正不正确呢 我们说了标识符的第一个符号不能是数字 所以它也是错的 那么再下来一个警号123也是不正确的 因为警字号也是不合法的字符 那么3ABC用数字作为第一个字符也是错误的 那么A>B含有不合法的字符大于号 所以这个标识符也是错误的 好 那么接下来我们就来看一下简单的C++程序 第一个例子我们看一下C++程序大概的一个框架是什么样子的 我们先看第一行 那么第一行是一个预处理命令 这个命令就是include命令 include就是包含的意思 那么include后面这个监控号里面写的ios_trim是一个头文件的名字 也就是说我要在这个程序里面包含ios_trim这个头文件 为什么要包含这个头文件呢 因为我们程序中肯定是要进行输入和输出的 那么输入和输出在C++里面都是通过输入输出流来实现的 而输入输出流的相关定义就放在这个ios_trim这个文件里面去 所以我们在编写程序的时候 这个头文件是一定要包含到我们程序里面去的 那么第二行的意思就是使用了一个名叫std的这样一个命名空间 为什么要加上第二行呢 那么命名空间的概念就是说明我现在使用的这些 比如说ios_trim它是在哪个命名空间里的ios_trim 那么就好比我们有两个班 每个班里面都有一个叫张三的一个同学 那么如果我光叫张三的话是分不清到底叫的是一班的张三还是二班的张三 但是如果我指明我现在找的是一班的张三 那么这个人就很明确了 那么命名空间就起到这样一个作用 我在这个空间下 那么我用ios_trim就是我这个空间的ios_trim了 好 那么第三行就是定义了一个主函数 那么我们说在C++程序里面有且只能有一个主函数 那么主函数的定义是这样的 首先主函数的类型是int型的 int就是一个数据类型 它表示的就是整形int 然后其次就是函数的名字就叫做man 那么主函数的名字只能叫man 不能改成其他的名字 在函数名后面是一对原括号 那么这个原括号是用来放我这个函数的参数的 那么主函数的参数是可以忽略的 可以不写 所以我们这号这个括号里面什么都没有 但是这个括号是不能够省略的 好 那么第四行到第七行都是用一对大括号把它括起来的 那么这对大括号呢就是我们函数的函数体 那么你这个函数要实现什么样的一个功能 那么这些功能的语句呢都要写在这个函数体里面去 那么我们看在这个主函数的函数体里面 包含了五行六行这么两条语句 第五行的这个语句是一个输出语句 那么sealt就是我们刚才提到过的这个输出流的一个对象了 那么现在sealt出现了就说明我要输出一个数据了 那么输出什么呢 我们看这个向左的两个箭头 表示的就是我们输出流使用到的这个流插入运算符 那么这个运算符的作用呢就是我要输出一个对象 那么一定要在这个对象的前面加上这样的一个运算符 好 那么我们要输出什么对象呢 我们看这号是不是有一个hello world这样的一个字符串呀 那么字符串要用双引号把它们引起来 所以我们这输出的就是一个hello world这样一个字符串 好 那么接着我们输出第二个对象了 所以又要用一个两个向左的箭头来表示 说明我要输出另一个对象了 那么输出的n的l它就是一个换行的一个作用 也就是说我输出完hello world以后 我的光标就跑到下一行去了 那么后面如果再输出什么内容的话呢 那么就在下一行进行输出了 那么再接着就是一个分号 我们说C++语言的每一条语句都要以分号作为结尾 所以分号是我们语句结束的一个标志 那么第五行就是向我们计算机的屏幕上输出了一个hello world 那么接着我们看第六行 第六行return 0什么意思呢 return就是返回的意思 所以这条语句的作用就是返回一个0值 那么我们的主函数返回只能够 我们要求只返回0值 就是说主函数的最后一条语句一定是一个return 0 因为主函数已经和操作系统约定好了 一旦主函数返回一个0 表示我这个程序就要结束了 所以我们这个程序的执行过程 先读主函数的第三行 对吧 第三行的这个主函数的头部 然后接着执行主函数体的语句 那么直到执行到return 0的时候 整个程序就结束了 好 那么第一个程序 相当于就是我们C++语言的一个程序的框架 那么将来我们编的程序是肯定要有主函数的 那么主函数具体怎么写 那么我们这行就告诉大家了 好 那么下来我们来看第二个例子 在第二个例子里面 我们看第一行 第二行 第三行 第四行和第十行都是一样的 就是该包含的头文件包含进去了 然后命名空间也已经说明好了 那么再有就是主函数的定义 那么唯一的区别就是主函数题里面我们增加了一些语句 那么下面我们看一下这些语句的功能了 那么第五行是定义了三个整形变量ab_sum 我们看int就说明我们要定义一个整形的一个对象了 那么我们这定义的是整形的变量分别叫做ab_sum 那么三个变量的名字要用逗号把它们分割开 然后分号作为语句的结束 那么第六行这条语句的功能是输入a和b的值 我们看这行这个c_in跟c_out是对应的 c_out是输出流 而c_in就是输入流 它后面跟的这个向右的两个箭头叫做提取运算符 那么它的作用就是你输入一个数据给一个变量的时候 我们就要加上这样一个运算符 那么给a输入一个数据以后再接着给b输入一个数据 所以整个这条语句就是给a和b都给他们输入这个语句了 那么第七行的作用就是将a和b的值进行相加 然后将相加的结果保存到sum这个变量里面去 相当于做了一个加法 那么第八条语句就是一个输出语句了 我们应该都能读懂了 我们要输出了 输出什么呢 输出的第一个对象是一个字符串a+b= 输出的第二个对象就是sum的值 那么sum就是放的是a+b的值了 把它输出 然后再输出一个换行的这样一个符号 那么接着return 0结束整个程序 所以我们可以看到第二个程序它的功能就是求一个加法的一个运算 并且将运算的结果输出到我们的显示器上 那么接着我们再来看第三个程序 那么第三个程序跟前两个程序的区别就是 我们是有两个函数构成这个程序的 除了我们说必须要有的这个主函数以外 我们还自己定义了一个名叫root的这样一个函数 那么这个函数就叫做我们自定义的函数 也就是说我们将来是有权利自己去定义函数的 好 那么下来我们先观察一下我们自定义的这个函数是怎么构成的 首先它是一个double类型的一个函数 那么它的类型是double型 double就是一个双精度类型 那么它是用来表示我们数学上说的小数的 就是凡是带小数点的这种数 我们可以用double类型来表示 那么root是我们这个函数的名字 那么名字后面同样是一对括号 里面括着的就是它的参数 我们这个root函数有两个参数x和y 它们都是double类型的 那么接下来就是我们这个函数的函数体了 从第五行到第七行 那么这个函数起到一个什么功能呢 我们看 它里面用到了一个义父语句 那么义父语句就好比我们平时生活中说的 这个如果的这个意思是一样的 比如说我们会有时候会聊天会说到 如果今年放假放的早的话 那么我们就可以去海南好好的玩一玩了 那么这个也就是说这个语义就表示了 如果我们的这个假期早的话 我们执行的是去海南的这个操作 那么如果这个条件不成立的话 我们就执行另一个操作就是可能就不去度假了 那么就代表这样一个语义 那我们看这条语句是什么意思呢 如果x>=y 这个括号里面表示的就是我们刚才说的条件 也就是说如果这个条件成立的话呢 我们执行什么操作呢 执行的就是义父后面根的这个操作 就是返回一个值 返回什么值呢 sqrt括号x-y 那么sqrt是系统定义好的一个数学函数 那么我们要定义这个数学函数就一定要再包含一个头文件 就是我们第二行包含的这个math cmath这个头文件 所有的数学函数相关定义都放在这个头文件里面 而我们这个程序使用了数学函数 所以要将这个头文件包含进来 好 那么这个return语句的功能呢 就是返回根号下的x-y这个值 sqrt就是一个求平方根的这样的一个函数了 好 那我们再看如果x>=y不成立的话 我们要怎么办呢 那么我们要执行else后面的另一个操作 返回一个0值 然后整个这个函数体结束 所以我们可以看到root这个函数的功能就是返回一个值 返回什么值是由条件x>=y来确定的 要不然返回根号下的x-y 要不然返回一个0值 好 那么下来我们再读一下这个主函数 那么在主函数的第9行 我们定义了两个变量a和b都是double型的 然后输入a和b的值 接着就输出了 输出的第一个对象就是root这个函数的调用 然后它是用a和b作为参数的 那么当调用root这个函数的时候呢 就会将a和b的值传递给了 这个root函数定义时的两个参数x和y 我们可以看到x和y本来是没有值的 那么它的值就是通过a和b传递过来的 所以我们这调用这个root函数的功能 其实就是得到一个根号下a-b的值或者得到一个0值 那么输出语句的功能就是将这个返回值进行输出 好 返回值输出了以后 我们再输出一个画这个程序的一个功能了 那么通过这个程序我们可以看到 我们一个程序里面可以有多个函数 但是主函数有 必须有 且只能有一个 而我们自定义的函数呢 可以有多个 也可以没有 那么通过这三个程序 我们简单的总结一下C++程序的一个特点 首先第一点 C++程序总是从主函数开始执行的 比如说我们刚才那个例子有两个函数 那么先执行哪个呢 我们说永远都先执行的是主函数 主函数不管放在你整个程序的什么位置 开头也好 结尾也好 中间也好 总是从主函数开始执行的 那么当主函数调用了子函数 这个子函数才有机会被执行 换句话说 如果我们在这个程序里面 主函数没有调用root这个子函数 那么这个子函数就不会被执行 好 那么第二点我们可以看到 C++程序的书写格式是比较自由的 比如说它可以一行里面写多条语句 这样的一些自由的格式 那么第三点就是分号式语句的组成部分 表示语句的结束 就是每条语句结束一定要用分号作为结尾 那么第四点就是 程序中我们可以添加一些注释便于阅读 那么大家也看到了 我们刚才程序中有一些绿颜色的字体 那么那些绿色的字体就是注释 那么在C++里面 我们可以通过两个斜杠来进行一个注释 那么注释的文字不是我们程序的一个组成部分 它只是一个注释而已 将来在执行这个程序的时候 是不需要这个注释的 是不会执行这些注释的 好 那么我们说C++语言的发明者 本贾尼斯特劳特斯卢普曾经说过这样的一句话 他是在一本书中提到的这样一句话 说C++语言的目标是什么呢 是在保证效率与C语言相当的情况下 加强程序的组织性 保证同样功能的程序C++更加短小 那么所以我们在今后学习C++的这个过程中 希望同学们每学到一个知识点 都能够体会到这个知识点的必要性 从而我们才能够领会C++程序设计的核心思想 好 那么这一讲我们就讲到这里 谢谢大家 (字幕由Amara.org社区提供)