05-0 运算符重载
运算符重载在 c++中是一个非常重要的知识点。
上一次遇到重载二字是在函数之中。在函数中,不同的传入的数据类型或数据数量可以实现重载:简单来说就是使用相同的函数名称,但是传入不同的参数,所对应的函数内容也不同。
运算符重载的概念:对已有的运算符进行重新定义,赋予它另外的一种功能,用来适应不同的数据类型。
运算符重载的关键字:operator
。
对于内置的数据类型,编译器是知道如何进行运算的。举个例子:
int a = 10;
int b = 20;
int c = a + b;
在这里,a
b
c
三个数据都是int
类型,编译器自然知道这里面的+
(加法)是如何进行的。
但是如果是自定义的数据类型,比如说结构体(struct
)或者说是一个类(class
)进行加法(+
)减法(-
)等等,则需要我们事先重载运算符(重新定义运算符)才可以实现。也是举个例子:
#include <iostream>
using namespace std;
class test
{
public:
int m_A;
int m_B;
};
int main()
{
class test t1;
t1.m_A = 10;
t1.m_B = 20;
class test t2;
t2.m_A = 10;
t2.m_B = 20;
//class test t3 = t1 + t2;
return 0;
}
在这里,注释掉的一行class test t3 = t1 + t2;
是错误的,原因是没有进行运算符重载。对于编译器来说,test
的数据类型是未知的。
当然,上面的例子中,只是举例了加法+
。但是,不仅仅是加法,还有四则运算、左移动运算符(<<
)、递增递减(++
和--
)等等。这些都是运算符,但是到了结构体(struct
)或者说是类(class
)中,就都不可以使用了。所以,我们需要对运算符进行重载。
小声:结构体(struct
)和类(class
)事实上是一个东西,无非是结构体(struct
)默认的权限是公共(public
),但是类(class
)的默认权限是私有(private
)。
:-)