Когда мы определяем операторную функцию внутри класса a, мы также определяем ее внутри класса, тогда эта функция НЕ является частью класса.
но такая же задача достигается, когда эта функция находится вне класса, и мы объявляем ее как друга внутри класса, но не определяем ее.
рассмотрим этот код, который имеет два идентичных определения операторов, где один находится внутри класса, а другой - вне класса:
версия 1 (внутри класса)
class MyClass
{
// version 1 inside a class
friend MyClass&& operator +(MyClass& a, MyClass& b)
{
return move(MyClass(a.x + b.x, a.y + b.y));
}
int x,y;
public:
MyClass() {}
MyClass(int,int){}
};
int main()
{
MyClass a, b, c;
c = a + b;
cin.ignore();
return 0;
}
версия 2 (вне класса)
class MyClass
{
friend MyClass&& operator +(MyClass& a, MyClass& b);
int x,y;
public:
MyClass() {}
MyClass(int,int){}
};
MyClass&& operator +(MyClass& a, MyClass& b)
{
return move(MyClass(a.x + b.x, a.y + b.y));
}
int main()
{
MyClass a, b, c;
c = a + b;
cin.ignore();
return 0;
}
Какая разница в этих двух подходах?