単項演算子の多重定義

C++パラメーターを持たない非静的メンバー関数、またはパラメーターを 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 に対して定義されていないからです。)

関連参照

IBM Copyright 2003