目录
2.2 C++语句
C++程序是一组函数,而每个函数又是一组语句。C++有很多种语句,这里直接少其中的一些。下面将围绕下面的程序清单2.2展开讲解:
//程序清单2.2
#include <iostream>
int main() {
using namespace std;
int yuanshi; //声明一个int类型的变量
yuanshi = 1601; //给这个变量赋值
cout << "我有";
cout << yuanshi; //输出这个变量所代表的值
cout << "颗原石。";
cout << endl;
yuanshi = yuanshi - 1600; //改变这个变量的值
cout << "Wa,是璃月的雷神欸!现在只剩下" << yuanshi << "颗原石了。" << endl;
return 0;
}
运行结果:
我有1601颗原石。
Wa,是璃月的雷神欸!现在只剩下1颗原石了。
2.2.1 声明语句和变量
计算机是一种精确、有条理的机器。我们如果要将信息存储在计算机中,必须指出信息的存储位置和所需要的内存空间。例如在如上的程序中:
int yuanshi;
这是一条声明语句,并且它提供了两个信息:需要的内存以及内存单元的名称。
在C++中,int 表示整数,所以这条语句指出程序需要足够的空间来存储一个整数,而具体的实现细节(分配和标记内存)由编译器负责。这里所说的整数是指没有小数部分的数字,像0、1、2、65536 这样的。后面的章节会逐一介绍C++的其他类型变量。
另一方面就是给存储单元指定名称。上面的语句使程序在这之后将使用名称 yuanshi 来标识存储在该内存单元中的值。yuanshi 也被称为变量,因为存储在 yuanshi 内部的值是可以修改的。
在C++中所有的变量都必须声明。在开头给出的程序中,如果省略了 yuanshi 变量的声明,那么当程序试图使用 yuanshi 变量的时候,编译器将指出错误。事实上变量需要声明在一定程度上也降低了程序编写出 bug 的情况。例如:
video = 0;
……
vedio = video + short_video;
……
return video;
在上述程序中错误的将 video 拼写成了 vedio,但是由于变量不需要声明程序不会指出错误,这样的小 bug 有可能找很长时间都发现不了。
程序中声明语句叫做定义声明(defining declaration)语句,简称为定义(definition)。这意味着它将使编译器为变量分配内存空间。在一些其他情况下,还有可能有引用声明(reference declaration)。并且对于变量的声明,C++的做法使尽可能在首次使用变量前声明它。
2.2.2 赋值语句
赋值语句将值赋给存储单元。例如:下列语句将整数1601赋给变量 yuanshi 表示的内存单元:
yuanshi = 1601;
符号 = 叫做赋值运算符。C++中可以连续使用赋值运算符。例如:
int mola;
int yuanshi;
int chuangshijiejing;
mola = yuanshi = chuangshijiejing = 666;
上述代码第四条语句表示:将 666 赋值给 chuangshijiejing,然后将 chuangshijiejing 的值赋给 yuanshi,然后将 yuanshi 的值赋给 mola。
yuanshi = yuanshi - 1600;
这条语句表明:可以使用变量和表达式来为变量赋值。如果赋值运算符右边是一个表达式,且表达式的值与赋值运算符左边的变量类型一样,那么可以顺利赋值。就像上式,yuanshi - 1600 是一个表达式,表达式的值是 1,所以赋值后的变量 yuanshi 的值为1。
同时C++允许在声明变量的时候给变量赋值:
int yuanshi = 1601;
这个过程叫做初始化(initialization)。
2.2.3 cout的新花样
到目前为止所有的程序都使用了 cout 来打印字符串。而本小节开头所给出的程序使用了 cout 来打印变量,该变量的值是一个整数:
cout << yuanshi;
而程序没有打印 “yuanshi” 而是打印存储在 yuanshi 中的整数值,即1601。而实际上程序将这两个操作合二为一了。首先,cout 将 yuanshi 替换为其当前值 1601,然后把值转化为合适的输出字符。
cout 可用于数字和字符串。但是,整数 1601 和字符串 “1601” 是不一样的。字符串存储的是书写该数字时所使用的字符,即字符“1”、“6”、"0"和“1”。程序在内部存储的是字符 1 、字符 6、字符 0 和字符 1。要打印字符串,cout 只需要打印字符串中的各个字符即可。但是整数 1601 在程序内部被存储为二进制数,所以在打印之前,cout 必须将整数形式的数字转换为字符串的形式。另外,cout 很聪明,知道 yuanshi 是一个需要转换的整数。
C语言中的输出会使用 printf(),这在C++中也可以使用。需要指明的是,cout 相较于 printf() 更加灵活,可以实现的功能更多。
2.3 其他C++语句
如下程序清单2.3对前一个程序进行了扩展。要求在程序运行的时候输入一个值。为了实现这个功能,它使用了 cin,这是与 cout 对应的用于输入的对象。
//程序清单2.3
#include <iostream>
int main() {
using namespace std;
int yuanshi;
cout << "你有多少颗原石?" << endl;
cin >> yuanshi ; //输入一个整数,并将这个整数存储在变量yuanshi中
cout << "抽了个十连。";
yuanshi = yuanshi - 1600;
cout << "现在只剩下" << yuanshi << "颗原石了。" << endl;
return 0;
}
运行结果:
你有多少颗原石?
1601
抽了个十连。现在只剩下1颗原石了。
2.3.1 使用cin
程序清单2.3表明,从键盘上输入的 1601 被赋给了变量 yuanshi,完成这个功能的是语句:
cin >> yuanshi;
从这条语句可知信息从 cin 流向 yuanshi 。与 cout 一样 cin 也是一个智能对象。它可以通过键盘输入的一系列字符转换为接受信息的变量能够接受的形式。在程序清单2.3中 yuanshi 是一个整数类型(以后简称整型)的变量,因此输入被转换为计算机用来存储整数的形式。
2.3.2 使用cout拼接
程序清单2.3的另一项特性就是将4条输出语句合并为一条。iostream文件中定义了 << 运算符,以便可以合并(拼接)输出:
cout << "现在只剩下" << yuanshi << "颗原石了。" << endl;
这与如下四条输出语句功能一致:
cout << "现在只剩下";
cout << yuanshi;
cout << "颗原石了。";
cout << endl;
2.3.3 类简介
类是用户定义的一种数据类型。要定义类,需要描述它能够表示什么信息和可对数据执行哪些操作。换句话说,类定义描述的是数据格式及其用法,而类的对象就是根据数据格式所创建的实体。
例如要定义类:花。那么花类的定义中就需要包括花的特点,以及花有哪些操作(长出新枝干、花芽分化、花朵开放和花朵枯萎等)。而玫瑰花就是花类的一个实体或称之为对象,它也拥有定义中的所有操作。但是玫瑰花还具有大多数花所不具有的特点,那就是花枝上有刺。这时我们可以通过类的继承来实现,这涉及到了之后章节的知识,就不过多赘述,读者只要知道有这么回事就好。