【C++基础】第四课:类简介

类,类类型,类对象,成员函数

Posted by x-jeff on March 28, 2019

【C++基础】系列博客为参考《C++ Primer中文版(第5版)》C++11标准)一书,自己所做的读书笔记。
本文为原创文章,未经本人允许,禁止转载。转载请注明出处。

1.类简介

在C++中,通过定义一个类(class)来定义自己的数据结构,可以定义使用上像内置类型一样自然的类类型(class type)

如前所见,为了使用标准库设施,我们必须包含相关的头文件。类似的,我们也需要使用头文件来访问自己的应用程序所定义的类。

通过使用.h作为头文件的后缀,但也有一些程序员习惯.H、.hpp和.hxx。
标准库文件通常不带后缀。

包含来自标准库的头文件时,应该用尖括号(<>)包围头文件名。对于不属于标准库的头文件,则用双引号(“”)包围。例如:

1
2
#include<iostream> //不需要加.h后缀
#include "Sales_item.h" //需要加.h后缀

每个类实际上都定义了一个新的类型,其类型名就是类名。例如:

1
Sales_item item;

类似intfloat等内置类型,我们定义了一个Sales_item的类类型。上述代码中,item是一个Sales_item 类型的对象,即类对象

1.1.Sales_item对象的加法

1
2
3
4
5
6
7
8
9
#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

使用了一个全新的“和”的概念,“和”的计算方式被定义在Sale_item类内。

1.2.文件重定向

为避免反复从键盘敲入数据作为程序的输入这一乏味机械的操作,可以使用文件重定向:

$ addItems <infile>outfile

假定$是操作系统提示符,1.1部分的加法程序已经编译为名为addItem.exe的可执行文件(在UNIX中是addItems),则上述命令会从一个名为infile的文件读取数据,并将输出结果写入到一个名为outfile的文件中,两个文件都位于当前目录中。

2.初识成员函数

但是将两个Sales_item对象相加的程序首先应该检查两个对象是否具有相同的ISBN。代码示例见下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#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;//表示失败
    }
}

其中,if语句的检测条件:item1.isbn() == item2.isbn()调用名为isbn成员函数(member function)。成员函数是定义为类的一部分的函数,有时也被称为方法(method)

👉点运算符:

通过类对象来调用成员函数,例如:item1.isbn。使用点运算符(.)来表达我们需要“名为item1的对象的isbn成员”。

⚠️点运算符只能用于类类型的对象。

👉调用运算符:

用点运算符访问一个成员函数,使用调用运算符(())来调用一个函数。调用运算符是一对圆括号,里面放置实参(argument)列表(可能为空)。