我一直在看一些開源代碼,我看到兩種不同的重載操作符的定義。它們之間的區別是什麼?是否有任何好處?這兩種操作符重載有什麼區別?
例如,一個例子中,我們有一個類:
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