Это не является обязательным, что арифметические операторы должны быть друг
Ну вы можете определить, как это:
MyClass MyClass::operator + (const MyClass& t) const
{
MyClass ret(*this);
ret += t;
return ret;
}
a + b
действительно является синтаксисом, компилятор будет расширять его a.operator+(b)
. Предыдущий образец будет работать, если все ваши объекты являются экземплярами MyClass, но не будут работать, если вам нужно работать с другими типами, то есть 1 + a
, не будет работать, это можно решить, используя друзей.
MyClass operator + (int i, const MyClass& t)
{
MyClass ret(i);
ret += t;
return ret;
}
Это должно быть сделано, когда левая рука оператора + не является классом, или это класс, но вы не можете добавить оператор + к его определению.