
1.2 对象、类型与变量
为了让输入的内容在程序中发挥作用,我们必须要在计算机内存中开辟一块“空间”来存储它们。关于这一点,C++之父Bjarne Stroustrup是这样说的:
我们将这样的一块“空间”称为一个对象。换而言之,对象就是内存中一块带有类型信息的区域,其类型规定的是这块“空间”内所能存储的信息种类,而被命名了的对象就叫作变量。例如,字符串要放在string变量中,整数要放在int变量中。大家可以将对象看作一个“盒子”,我们可以用它来存放该对象类型的值。
例如,在之前的程序中,我们就是用int类型来存储数字或整数的。在int变量上,我们可以执行包括加、减、乘、除在内的一系列操作。另外,这里需要提醒一下,C++中的乘法运算符是*(因为用x可能会带来某种混淆)。
double courseGrade = 0.5*projects + 0.2*midterm + 0.5*finalExam;
float和double这两个类型存储的是带有小数部分的数值(double是两倍大的float类型)。另外,C++的string类型中存储的是“Firstname I. Lastname”这样的字符序列,以及一个记录该字符串中字符数的整数。
对象是存在于计算机内存中的实体,我们可以通过一个对象所存储的值类型(它的属性)以及它所能执行的操作(它的行为)[Booch]来理解这个对象。也就是说,每个对象都应该有:
● 一个用于存储和检索该对象值的名称。
● 一组存储与计算机内存中的值,它们代表了该对象的状态。
● 一组该对象可以执行的操作,比如加法、输入、输出、赋值等。
关于对象的名称、状态和操作这3个特征,我们在之前的课程成绩程序中其实都有说明。该程序用projects、midterm、finalExam这3个数字对象存储了来自键盘的输入。这些对象各自都存储了一个像79或90这样的整数。并且这些对象可以执行输入、乘法和加法操作,以此计算出了courseGrade的值。另外,这些数字对象还用赋值操作完成了存储动作,用cout<<操作完成了输出动作,这样用户才能看到程序处理的结果。
首个程序中的对象特征:

在C++中,类型分为基本类型和复合类型两种。其中,基本类型所存储的是一个固定大小的、直接与硬件对应的值,这种类型确定的是其对象中可以存储什么值,以及可以在该对象上执行什么操作。对于int和double这样的数字类型来说,其对象所占的字节数在不同的计算机中是不一样的,这决定着该对象所能存储的取值区间。

复合类型是一种由其他类型来定义的类型,本书将会涉及的复合类型包括引用、函数、类、数组以及指针。举例来说,下面的string就是一个由字符和其他相关数据组成的引用类型,它可以找出某字符序列的长度,也可以从某一字符串中创建一个被指定了首尾索引的子字符串(在后续章节中,我们还会介绍更多相关的操作):
string aString = "A sequence of characters"; // Output: cout << aString.length() << endl; // 24 cout << aString.substr(2, 8) << endl; // sequence
除了string类型之外,还有两个类型我们现在就已经使用到了,它们分别是:名为cin的istream对象——它的作用是从键盘和磁盘文件这样的输入源中读取数据;以及名为cout的ostream——它的作用是输出程序产生的内容。
自测题
1-12.请描述一下存储在double类型对象中的值。
1-13.请说出两个double对象的操作名称。
1-14.请描述一下存储在int类型对象中的值。
1-15.请说出两个int对象的操作名称。
1-16.请描述一下存储在string类型对象中的值。
1-17.上面哪种类型的对象中只存储一个值?