パラメーターを持たない非静的メンバー関数、またはパラメーターを 1 つ持っている非メンバー関数のいずれかを使用して、
単項演算子を多重定義します。
単項演算子 @ は、ステートメント @t の形で呼び出されるものと想定します。
ここで、t は、型 T のオブジェクトです。
この演算子を多重定義する非静的メンバー関数は、以下の形式になっています。
return_type operator@()
同じ演算子を多重定義する非メンバー関数は、以下の形式になっています。
return_type operator@(T)
多重定義された単項演算子は、どんな型も戻すことができます。
次の例では、! 演算子を多重定義します。 演算子:
#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; }
次に、上記の例の出力を示します。
void operator!(X) void Y::operator!()
演算子関数呼び出し !ox は、operator!(X) と解釈されます。 呼び出し !oy は、Y::operator!() と解釈されます。 (コンパイラーは、!oz を許可しません。 なぜなら、! 演算子は、クラス Z に対して定義されていないからです。)
関連参照