Il n'est pas obligatoire que les opérateurs arithmétiques soient des amis.
On peut le définir comme ça :
MyClass MyClass::operator + (const MyClass& t) const
{
MyClass ret(*this);
ret += t;
return ret;
}
El a + b
est en fait un sucre de syntaxe, le compilateur le développera en a.operator+(b)
. L'exemple précédent fonctionnera si tous vos objets sont des instances de MyClass, mais ne fonctionnera pas si vous devez opérer avec d'autres types, c'est-à-dire 1 + a
ne fonctionnera pas, ce problème peut être résolu en utilisant des amis.
MyClass operator + (int i, const MyClass& t)
{
MyClass ret(i);
ret += t;
return ret;
}
Cela doit être fait lorsque le côté gauche de l'opérateur + n'est pas une classe, ou qu'il s'agit d'une classe mais que vous ne pouvez pas ajouter l'opérateur + à sa définition.