我一直在看一些开源代码,我看到两种不同的重载操作符的定义。它们之间的区别是什么?是否有任何好处?这两种操作符重载有什么区别?
例如,一个例子中,我们有一个类:
class foo{
public:
void SetValue(double input_value) {foo_value = input_value};
double GetValue() {return foo_value;}
private:
double foo_value;
};
然后我有时会看到两种不同类型/样式重载加法运算符(例如)
class foo{
const foo operator+(const foo& input_foo);
};
const foo foo::operator+(const foo& input_foo) {
foo_value += input_foo.foo_value;
return *this;
}
另一种类型的的超载我有时看到的是:
class foo{
friend const foo operator+(const foo& input_foo1, const foo& input_foo2);
};
const foo operator+(const foo& input_foo1, const foo& input_foo2); // Defined right after class
const foo operator+(const foo& input_foo1, const foo& input_foo2) {
foo temp_foo;
temp_foo.SetValue(input_foo1.GetValue() + input_foo2.GetValue());
return temp_foo;
}
您的第一个版本的operator +'是完全错误的。 –
[运算符重载]的可能重复(http://stackoverflow.com/questions/4421706/operator-overloading) – nbro
您通常将它们定义为具有两个参数的类外方法。一方面,它表明它们不是该类的基本组成部分,但只使用其公共API,另一方面,如果左侧不是您的类(但是例如int),它也可以工作。 – dascandy