Арифметические операторы не обязательно должны быть друзьями
Ну, вы можете определить так:
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;
}
Это должно быть сделано, когда левая часть оператора + не является классом, или это класс, но вы не можете добавить оператор + к его определению.