运算符重载的实质是编写以运算符作为名称的函数。
运算符函数的格式如下:
返回值类型 operator 运算符(形参表)
{
...
}
包含被重载的运算符的表达式会被编译成对运算符函数的调用,运算符的操作数成为函数调用时的实参,运算符的结果就是函数的返回值。
#include <iostream>
using namespace std;
class Complex
{
public:
double real, imag;
Complex(double r = 0.0, double i = 0.0) : real(r), imag(i)
{
}
Complex operator-(const Complex &c);
};
Complex operator+(const Complex &a, const Complex &b)
{
return Complex(a.real + b.real, a.imag + b.imag);
}
Complex Complex::operator-(const Complex &c)
{
return Complex(real - c.real, imag - c.imag);
}
int main()
{
Complex a(4, 4), b(1, 1), c;
c = a + b;
cout << c.real << "," << c.imag << endl;
cout << (a - b).real << "," << (a - b).imag << endl;
return 0;
}
23行可以认为是
c = operator+(a, b);
调用函数operator+()
返回值是一个Complex对象。
25行的a - b
可以理解为
a.operator-(b);
即为对象a,调用了方法operator-()
参数为b