C++程序设计(第3版)
上QQ阅读APP看书,第一时间看更新

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这样的整数译者注:作者原文如此,实际上他用的是double类型的浮点数。。并且这些对象可以执行输入、乘法和加法操作,以此计算出了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.上面哪种类型的对象中只存储一个值?