我正在学习 C++,并创建了两个简单的 hello-world 应用程序。在他们两个中,我都使用运算符重载,但这是问题所在。在第一个上,我可以为重载运算符提供两个参数,这很好。
标题:
enum Element {a,b,c,d,e};
Element operator + (Element x, Element y);
//more overloads for -, *, / here
来源:
Element operator + (Element x, Element y) {
return ArrayOfElements[x][y];
}
但是在我的第二个应用程序(简单的复数计算器)中 - 这种方法不起作用。在谷歌搜索并找出原因之后,我最终得到了以下代码:
标题:
struct Complex {
double Re;
double Im;
Complex (double R, double I) : Re(R), Im(I) { }
Complex operator + (Complex &Number);
//more overloads
};
来源:
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++
都使用相同的库。