C++ – Overloading Arithmetic Operators

coperator-overloading

The assignment operator can be declared as

T& operator= (const t&);

in a class, but the arithmetic operators cannot be defined that way. It has to be friend function. I don't understand why? Can you please explain ?

Best Answer

It is not mandatory that arithmetic operators should be friend

Well you can define like this:

MyClass MyClass::operator + (const MyClass& t) const
{
  MyClass ret(*this);
  ret += t;
  return ret;
}

The a + b is really a syntax sugar, the compiler will expand it to a.operator+(b). The previous sample will work if all your objects are MyClass instances, but will not work if you have to operate with others types, ie 1 + a, will not work, this can be solved by using friends.

MyClass operator + (int i, const MyClass& t)
{
  MyClass ret(i);
  ret += t;
  return ret;
}

This has to be done when the left hand side of the + operator is not a class, or it is a class but you can't add operator + to its definition.