18.类中重载运算符与友元
上次节中学习了如何在类中重新定义赋值(=)运算符,实际上在一个自定义类中除了赋值(=)运算符外,类的对象是不可以直接使用运算符的,比如你在main函数中写这样的代码会报错:
如果想解决这些报错问题,需要在类中重载这些运算符。
18.1 重载
在表达式中使用
首先在类中声明要重载的运算符:< ,然后去函数中实现具体的比较规则。
声明重载运算符函数的代码要求按照固定的格式:必须在运算符
18.2 重载+运算符
如同上面的
18.3 重载<>运算符
之前我们可以使用C++ 的流提取运算符 >> 和流插入运算符 << 来输入和输出内置的一些数据类型,实际上我们也可以重载流提取运算符和流插入运算符来操作自定义的数据类型。
在这里,有一点很重要,我们需要把运算符重载函数声明为类的友元函数,这样我们就能不用创建对象而直接调用函数了。
重载运算符之后,在main函数中直接通过cout输出对象的数据,或cin输入对象的数据。
18.4 友元函数
类的private的成员只有类的成员函数才有权直接访问,外部函数无访问权限。但是类中有一种特殊的函数——友元函数,有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数在类的定义中出现过,但友元函数并不是类的成员函数。
如果要声明一个函数为类的友元函数,需要在类定义中使用关键字 friend,函数的参数必须有一个类对象参数,因为只有通过对象才能访问私有或保护的成员:
18.5 友元类
友元也可以是一个类,该类被称为友元类。如果声明一个类为友元,那整个友元类的所有成员都是这个类的友元。
如果要声明友元类,需要在类定义中使用关键字 friend,如下所示:
友元类的任何成员函数都可以访问类的成员。