运算符重载
介绍C++的运算符重载及其原理,梳理一下注意要点,融入自己的理解,用一个例子贯穿,学浅勿喷。
1、引入
使用一个例子引入运算符重载。
首先,定义一个复数类Complex
:
class Complex{
private:
int real;
int virt;
public:
Complex(int r, int v){real=r;virt=v;}
}
现在假设我们要实现两个复数相加,没有运算符重载之前,可以增加一个成员函数add:
Complex Complex::add(const Complex & c) const {
return Complex(real+c.real, virt+c.virt);
}
可以调用add函数实现复数相加:c3 = c1.add(c2)
,但是如果能使用c3 = c1 + c2
的表达式形式,显然更便捷易懂。这里就需要运算符重载,重载运算符之后,就能直接使用运算表达式对自定义类型进行运算。
运算符重载通过运算符函数实现,这是一类特别的函数,函数名必须是operator
关键字后跟要重载的运算符,参数列表与运算符的操作数相关(如何相关在后面说),其它的与普通函数一样。上面的add()函数,我们只需要修改函数名为operator+
就成功重载了+
运算:
Complex Complex::operator+(const Complex & c) const {
return Complex(real+c.real, virt+c.virt);
}
现在,就可以使用c3=c1+c2
来进行两个复数相加了。另外也可以使用函数调用c3=c1.operator+(c2)
。
总结就是重载运算符可以支持自定义类型进行运算符运算,为编程提供便利。