You overload a binary unary operator with either a nonstatic member function
that has one parameter, or a nonmember function that has two
parameters. Suppose a binary operator @ is called with the
statement t @ u, where t is an object of type
T, and u is an object of type U. A
nonstatic member function that overloads this operator would have the
following form:
return_type operator@(T)
A nonmember function that overloads the same operator would have the following form:
return_type operator@(T, U)
An overloaded binary operator may return any type.
The following example overloads the * operator:
struct X { // member binary operator void operator*(int) { } }; // non-member binary operator void operator*(X, float) { } int main() { X x; int y = 10; float z = 10; x * y; x * z; }
The call x * y is interpreted as x.operator*(y). The call x * z is interpreted as operator*(x, z).
Related References