You overload a unary operator with either a nonstatic member function that has
no parameters, or a nonmember function that has one parameter. Suppose
a unary operator @ is called with the statement @t, where
t is an object of type T. A nonstatic member
function that overloads this operator would have the following form:
return_type operator@()
A nonmember function that overloads the same operator would have the following form:
return_type operator@(T)
An overloaded unary operator may return any type.
The following example overloads the ! operator:
#include <iostream> using namespace std; struct X { }; void operator!(X) { cout << "void operator!(X)" << endl; } struct Y { void operator!() { cout << "void Y::operator!()" << endl; } }; struct Z { }; int main() { X ox; Y oy; Z oz; !ox; !oy; // !oz; }
The following is the output of the above example:
void operator!(X) void Y::operator!()
The operator function call !ox is interpreted as operator!(x). The call !oy is interpreted as y.operator!(). (The compiler would not allow !oz because the ! operator has not been defined for class Z.)
Related References
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.