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

本文通过实例讲解如何定义类并创建对象,详细介绍了类的构成、实例变量的声明与访问方法,并通过代码示例展示如何为对象赋值及计算属性。进一步阐述了每个对象都是独立的实例变量副本,强调了类与对象在编程中的核心作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


必备技能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. 每一个对象都含有类的____的副本。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值