我正在学习 C++,并且创建了两个简单的 hello-world 应用程序。在这两个例子中我都使用了运算符重载,但问题就在这里。对于第一个,我可以为重载运算符提供两个参数,这很好。
Header:
enum Element {a,b,c,d,e};
Element operator + (Element x, Element y);
//more overloads for -, *, / here
Source:
Element operator + (Element x, Element y) {
return ArrayOfElements[x][y];
}
但在我的第二个应用程序(简单的复数计算器)中 - 这种方法不起作用。经过谷歌搜索并找出原因后,我最终得到了这段代码:
Header:
struct Complex {
double Re;
double Im;
Complex (double R, double I) : Re(R), Im(I) { }
Complex operator + (Complex &Number);
//more overloads
};
Source:
Complex Complex::operator + (Complex &Number)
{
Complex tmp = Complex(0, 0);
tmp.Re = Re + Number.Re;
tmp.Im = Im + Number.Im;
return tmp;
}
它现在可以工作了,但我想知道,为什么在第一段代码中我被允许放入两个参数operator
超载,但在第二个超载时出现以下错误?
complex.cpp:5:51: error: 'Complex Complex::operator+(Complex, Complex)' must take either zero or one argument
无论我是否使用类,情况都是一样的。我一直在寻找许多文档,第二种方法似乎更正确。也许是因为参数类型不同?
两个源均编译为-Wall -pedantic
参数使用g++
,两者都使用相同的库。