HOME/CPP Primer/

1.5 类简介

Article Outline
TOC
Collection Outline

1.5 类简介

在C++中,我们通过定义一个类来定义自己的数据结构。一个类定义了一个类型,以及与其关联的一组操作。类机制是C++最重要的特性之一。实际上,C++最初的一个设计焦点就是能定义使用上像内置类型一样自然的类类型

为了使用类,我们需要了解三件事情:

  • 类名是什么?
  • 它是在哪里定义的?
  • 它支持什么操作?

1.5.1 Sales_item类

Sales_item类的作用是表示一本书的总销售额、售出册数和平均售价。我们现在不关心这些数据如何存储、如何计算。为了使用一个类,我们不必关心它是如何实现的,只需知道类对象可以执行什么操作。

每个类实际上都定义了一个新的类型,其类型名就是类名因此,我们的Sales_item类定义了一个名为Sales_item的类型。与内置类型一样,我们可以定义类类型的变量。当我们写下如下语句

Sales_item item;

是想表达item是一个Sales_item类型的对象。除了可以定义Sales_item类型的变量之外,还可以:

  • 调用一个名为isbn的函数从一个Sales_item对象中提取ISBN书号。
  • 用输入运算符(>>)和输出运算符(<<)读、写Sales_item类型的对象。
  • 用赋值运算符(=)将一个Sales_item对象的值赋予另一个Sales_item对象。
  • 用加法运算符(+)将两个Sales_item对象相加。两个对象必须表示同一本书(相同的ISBN)。加法结果是一个新的Sales_item对象,其ISBN与两个运算对象相同,而其总销售额和售出册数则是两个运算对象的对应值之和。
  • 使用复合赋值运算符(+=)将一个Sales_item对象加到另一个对象上。

读写Sales_item

#include <iostream>
#include "Sales_items.h" // 不属于标准库的头文件,使用双引号包围
int main()
{
    Sales_item book;
    // 读入ISBN号、售出的册数以及销售价格
    std::cin >> book;
    // 写入ISBN、售出的册数、总销售额和平均价格
    std::cout << book << std::endl;
    return 0;
}

如果输入:

0-201-70353-x 4 24.99

则输出为

0-201-70353-x 4 99.96 24.99

Sales_item对象的加法

#include <iostream>
#include "Sales_item.h"
int main()
{
    Sales_item item1, item2;
    std::cin >> item1 >> item2;
    std::cout << item1 + item2 << std::endl;
    return 0;
}

如果输入如下内容:

0-201-78345-X 3 20.00
0-201-78345-X 2 25.00

则输出为:

0-201-78345-X 5 110 22

1.5.2 初识成员函数

将两个Sales_item对象相加的程序首先应该检查两个对象是否具有相同的ISBN。

#include <iostream>
#include "Sales_item.h"
int main()
{
    Sales_item item1, item2;
    std::cin >> item1 >> item2;
    // 首先检查item1和item2是否表示相同的书
    if(item1.isbn() == item2.isbn())
    {
        std::cout << item1 + item2 << std::endl;
        return 0;
    }
    else
    {
        std::cerr << "Data must refer to same ISBN" << std::endl;
        return -1;
    }
}

什么是成员函数

成员函数是定义为类的一部分的函数,有时也被称为方法。

通常以一个类对象的名义来调用成员函数。例如:

item1.isbn()

点运算符只能用于类类型的对象。其左侧运算对象必须是一个类类型的对象,右侧运算对象必须是该类型的一个成员名,运算结果为右侧运算对象指定的成员。