演算子のオーバーロード(C++)
C++ では、大部分の演算子の動作を再定義することができ、それによって、特定のクラスのオブジェクトに対して使われたときに特定の機能を実行させることができます。一般的な C++ 関数のオーバーロードと同様に、コンパイラは、呼び出しのコンテキスト、つまり引数やオペランドの数と型に着目して、それぞれの関数を区別します。
以下のものを除いて、すべての演算子はオーバーロードすることができます。
. .* :: ?:
以下のプリプロセッサ シンボルはオーバーロードできません。
# ##
=、[ ]、( )、および -> の各演算子は、非静的メンバ関数としてのみオーバーロードできます。これらの演算子は、enum 型に対してはオーバーロードできません。これらの演算子のグローバル バージョンをオーバーロードしようとすると、コンパイル エラーが発生します。
キーワード operator の後に演算子シンボルを付けたものを演算子関数名と呼びます。これは、演算子の新しい(オーバーロードされた)動作を定義する際に、通常の関数名と同じように使用されます。
引数を渡して演算子関数を呼び出すと、式の中で演算子がオペランドに対して作用するのと同様の動作が行われます。演算子関数では、引数の数や、標準の演算子を使用するときに適用される優先順位や結合規則を変更することはできません。