By 精英王子
CC-BY-NC-SA(署名-非商业性使用-以相同方式共享) 3.0
注:解说在图片下方
原始幻灯片(持续更新):https://docs.google.com/presentation/d/1BOk1KOHcI6Ts345Ja5vAyhSXhHRBRc53FNPnfr1p7fQ/edit
解说写在讲者备注
中
有同学表示上节课太浮云,没啥实际的。
我想说,我讲的都是我认为各位有必要了解的,如果你打算学C++,请端正态度,这里没有哪些是不重要的。
我已经把“预备知识”精简得很少了,其实我可以光讲“预备知识”而十节课不重样。
那么,这节课来点实际的!
这个程序的功能是输出一行字“Hello World!”,我们先要了解的是C++的输出功能。
C++提供了一个名叫iostream(input output stream)的组件,这个组件用来控制C++程序的输入和输出。
C++的输入和输出是基于一种“流”的概念,这是一个很有趣的概念。
试想,数据(在这里是“Hello World!”这一行字)就好像水流,屏幕就像一根水管。数据从计算机中,由屏幕这个水管流出来。
在你用键盘输入字符时,字符通过键盘流入计算机。
水管的特点就是可以任意组装,(通过后续的学习)你可以轻松地把本来指向屏幕的数据流,接到打印机上打印出来;或者接到文件上,写入到文件;再或者接到网络上,由网络发送数据流。
下面介绍这个(<<)符号,它由两个左尖括号组成,它在这里叫“流插入运算符”.
顺便提一下,C++中每个符号都有多种含义,不同的上下文的情况下,含义和功能不同。
流插入运算符就像一个箭头一样,在这里,它把右边的“Hello World!”插入到了cout中。cout表示标准输出(stdout)(standard output),默认是显示器,从而把“Hello World!”显示在屏幕上。
在C++,以及其他很多编程语言中,文字(Hello World!)必须由双引号括起来,因为计算机(编译器)不知道你是想在屏幕上显示“Hello World!”,还是发出一个叫Hello World!的指令。
“Hello World!”之后还有一个endl(end line),它是一个控制符,姑且我们可以认为它表示一个换行。
但事实上,cout和endl并不是C++语法的一部分,C++只提供的最为基础的语法,甚至不包括输入/输出、读写文件、绘制图形、网络操作、复杂的数学运算。在C++标准制定之前,这都需要程序员自己来完成。
为提高开发效率,标准中要求各编译器附带一个“标准库”,来提供上述部分功能。我们这套课程也会介绍标准库中一些功能的使用。标准库可以说是对C++各种语法的最佳实践。
即使编译器中附带了标准库,但如果你没有明确要求使用它,它也绝对不会出现。
开头的#include 表示把iostream这个标准库文件包含进来,这个组件之前介绍过了,用于提供输入输出的功能。
cout就依赖于iostream.
标准库中包含了很多的东西,为了防止你自己编写的代码与标准库发生冲突(如重名),标准库中的东西会被加上std::的前缀。cout事实上应该写成std::cout.
就像这样
但是对于我们这个不足十行的小程序来说,这么写只会带来麻烦而不是优势。所以我们可以加上这样一句(using namespace std;)代码来省略std::.
这行最后是一个分号,在C++中用分号表示一个语句的结束,而不是通过换行。事实上,C++编译器会忽略所有多余的换行和空格。这可以使人们自由地排版,让代码更容易阅读。
不过不建议大家使用过于反人类的排版方式。
现在我们已经将这个程序最核心的语句(cout<<“Hello World!”<<endl;)介绍完了,这行代码就能完成程序的主要功能,那么剩下几行是干什么的呢?
一个程序可能会有成千上万行代码,复杂的项目,如一个游戏,可能有几十万行代码。那么代码是从哪一行开始运行的呢?
并非想当然地是从头开始,而是从一个叫main(不是MAIN ,也不是mAin,更不是mian)的函数开始执行。这是一个约定俗成的习惯。
函数(function)是编程中一个常见的概念,它和数学上的函数概念有所不同,但也有一些相似,不过即使你对数学中的函数一窍不通,也不会影响你接下来的学习。
函数是程序的重要组成部分,一个程序可以由若干的函数组成,也可以只有一个——main函数。
函数包括了若干条以分号结尾的语句,一个函数被执行时,其中的语句会按照顺序逐个执行。
main函数是一个特殊的函数,它会在程序被打开时,(由操作系统调用)自动开始执行,是整个程序的入口点。
int main() 这是函数头,就像一个函数的自我介绍,一开始的int是“返回值类型”,在这里是int (Integer,整数).
然后是函数的名字,这里是main,最后括号中的是参数列表,在这里是空的。
对上述术语不懂没关系,今后我会细致讲解。
接下来就是main函数的内容,我们称之为函数定义,函数定义可能包含很多行语句,所以我们要用花括号将它们括起来。
一对花括号,以及其中的内容,在C++中表示一个“块”,是一个整体。在这里,这个块就是main函数的函数定义。
还有一句(return 0;),这表示中断(退出)这个函数(main函数)的执行,并提供返回值0给调用者,关于返回值,我们会在讲函数时详细讲。
至此,我们已经介绍完了Hello World这个程序。
为了帮助你自己或别人理解你的代码,你可以在代码中加入注释
C++中的注释有两种,一种是以两个斜杠开始,直到这一行结束。
还有一种以一个斜杠和一个星号开始,直到一个星号和一个斜杠,可以跨越多行。
编译器会无视你的注释,应该说注释是写给将来阅读代码的人看的。从某种程度上说,代码也是写给人看的,而不是计算机。
因为计算机只能理解二进制的指令。
这是上节课提到的另一个程序,这个程序会从键盘读取连个数字,计算这两个数字的和并输出。
我再介绍一下在命令行上输入数据:输入两个数字,中间以空格隔开,然后按回车,或者每输入一个数字按一次回车。
这个程序和刚才的Hello World差不多。相同的部分不再介绍。
double a,b; 这句的意思是定义两个double类型的变量,分别命名为a和b.
变量(Variable),就是可以在运行时改变的量,是处理数据的基础。
你可以随时把一个值存入变量,也可以随时读取它所存储的值。
变量所存储的值的类型,就是变量的类型。换句话说,变量的类型,决定了变量可以储存什么样类型的值。
这里的类型,可以是整数、浮点数(小数)、字符串(文字)等等.
这里的double表示浮点数,即小数,所以我们这个程序不光可以计算整数的和,还可以计算小数的和。
在定义变量之后就可以使用它了。
cin>>a>>b;
我们又看到了流插入运算符,但怎么是反的?
cin(char input)在这里表示标准输入,一般默认是来自键盘的。
这句代码的意思是让数据由键盘流至a、b这两个变量中。即从键盘读取两个数(小数,这取决与a和b的类型),分别存入a和b.
double c=a+b; 这次我们又定义了一个浮点型变量c,而且直接把它的值设置为a加b的和。
等号在这里叫赋值号,用来把右边的值复制到左边的变量中。而加号就是通常意义的相加。
这句代码其实是下面两句的缩写:
double c;
c=a+b;
cout<<a<<”+”<<b<<”=”<<c<<endl;
这一句看似复杂,但其实是我们学过的东西,
它会输出a+b=c,当然,a、b、c会用它们实际的值来替换。
可以看到,若要使用变量的值,直接写它的名字就可以,而要表示a这个字母,则要加双引号。