Overloading Arithmetic Operators

后端 未结 4 1493
爱一瞬间的悲伤
爱一瞬间的悲伤 2021-01-24 10:52

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 fri

4条回答
  •  甜味超标
    2021-01-24 10:59

    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.

提交回复
热议问题