C++初学者指南 第八篇(2)

来源:互联网 发布:数据库维护工程师 编辑:程序博客网 时间:2024/04/30 16:19


必备技能8.2:定义类并创建对象
    我们将通过编写一个来学习类的用法。该类封装了与车辆相关的信息,例如,轿车、货车和汽车。这个类名称为Vehicle,它将包含和车辆相关的三个信息:载客量,可承载的油量以及每加仑油能跑的英里数。

    这个类的最初版本如下。其中定义了三个实例变量:passengers,fuelcap和mpg。请注意,其中没有任何的函数。所以,它是一个只含有数据的类。
 

class Vehicle{public:    int passengers;  //可以乘坐乘客的人数    int fuelcap;     //可以承载的油量,加仑    int mpg;         //每加仑油能跑的英里数};

它给我们展示了声明实例变量的方式。声明实例变量的通用形式如下:
类型 变量名称;
其中的类型指明了变量的类型;变量名称就是变量的名字。可见,实例变量的声明和其它变量的声明是一样。针对Vehicle这个类来说,它的实例变量前面有public关键字。正如我们在前面解释过的那样,这就使得我们在Vehicle类之外也是可以访问这三个实例变量的。
    一个类的定义就创建了一种新的数据类型。针对上面的类,这个新的数据类型就是Vehicle。我们可以使用这个名称来创建Vehicle类型的对象。因此,每个Vehicle类型的对象都将含有三个实例变量的副本:passangers,fuelcap,mpg。访问这些实例变量的时候我们需要使用点号(.)运算符。点号运算符把对象的名称和成员的名称连接起来。点号运算符的通用形似如下:
对象.成员
因此,对象是在点号的左侧的,成员是在点号的右侧的。例如,给对象minivan的fuelcap成员赋值为16,代码如下:

minivan.fuelcap=16;


 一般情况下,我们可以使用点号运算符来访问实例变量和函数。下面是使用Vehicle类的完整程序:

#include <iostream>using namespace std;class Vehicle{public:    int passengers; //可以乘坐乘客的人数     int fuelcap;    //可以承载的油量,加仑     int mpg;        //每加仑油能跑的英里数}; int main(){    Vehicle minivan; //创建一个Vehicle类型的对象     int range;     //给minivan的字段赋值,注意我们使用点号来访问对象的成员     minivan.passengers = 7;    minivan.fuelcap = 16;    minivan.mpg = 21;    range = minivan.fuelcap * minivan.mpg;    cout << "Minivan can carry " << minivan.passengers <<        " with a range of " << range << "\n";     return 0;}


运行上面的程序,输出结果如下:
Minivan can carry 7 with a range of 336
    在我们继续学习之前,我们复习一个重要的原则:每一个对象是含有一份类中定义的实例变量的拷贝。因而,一个对象的变量的内容是可以和另外的对象的变量的内容不一样的。除了是相同类型的对象之外,这两个对象之间没有任何别的联系。例如,有两Vehicle的对象,每一个都含有passengers,fuelcap和mpg的拷贝,它们的值也可以完全不一样。下面的程序就演示了这种情况:

#include <iostream>using namespace std;class Vehicle{public:   int passengers; //可以乘坐乘客的人数    int fuelcap;    //可以承载的油量,加仑    int mpg;        //每加仑油能跑的英里数}; int main(){    //创建两个对象,每个对象都含有自己的实例变量的拷贝    Vehicle minivan; //创建一个Vehicle类型的对象    Vehicle sportcar; //创建了另一个对象    int range1, range2;     //给minivan的字段赋值    minivan.passengers = 7;    minivan.fuelcap = 16;    minivan.mpg = 21;     //给sportcar的各个字段赋值    sportcar.passengers = 2;    sportcar.fuelcap = 14;    sportcar.mpg = 12;    range1 = minivan.fuelcap * minivan.mpg;    range2 = sportcar.fuelcap * sportcar.mpg;    cout << "Minivan can carry " << minivan.passengers <<        " with a range of " << range1 << "\n";    cout << "Sportcar can carry " << sportcar.passengers <<        " with a range of " << range2 << "\n";     return 0;}


程序的输出如下:
Minivan can carry 7 with a range of 336
Sportcar can carry 2 with a range of 168
正如我们看到的那样,minivan的数据和sportcar的数据时完全分开的。图8-1描述了这种情况:


图8-1 不同对象的实例变量之间是相互对立的
练习
 1. 一个类可以含那两部分的内容?
 2.  通过对象来访问类的成员的时候需要什么运算符?
 3. 每一个对象都含有类的____的副本。

原创粉丝点击