単項マイナス演算子は、通常は数値の符号を反転するために使用されますが、クラスや構造体などのユーザー定義型に対してもオーバーロードすることができます。以下に、いくつかの方法を示します。
方法1: メンバ関数を使用したオーバーロード クラス内にメンバ関数として単項マイナス演算子のオーバーロードを定義します。この方法では、オブジェクト自体を変更するため、メンバ関数は非constとする必要があります。
class MyClass {
public:
MyClass operator-() {
// オブジェクトの状態を変更する処理
return *this;
}
};
方法2: 友達関数を使用したオーバーロード クラス外に友達関数として単項マイナス演算子のオーバーロードを定義します。この方法では、オブジェクト自体を変更する必要がないため、関数はconstとすることができます。
class MyClass {
friend MyClass operator-(const MyClass& obj) {
// オブジェクトの状態を変更しない処理
return obj;
}
};
方法3: グローバル関数を使用したオーバーロード クラスとは関連付けられていない状態で、単項マイナス演算子のオーバーロードを定義します。
class MyClass {
// クラスの定義
};
MyClass operator-(const MyClass& obj) {
// オブジェクトの状態を変更しない処理
return obj;
}
これらの方法を使用して、ユーザー定義型に対して単項マイナス演算子をオーバーロードすることができます。ただし、オーバーロードの実装には注意が必要であり、意図しない振る舞いを引き起こさないようにする必要があります。
なお、上記のコード例は単純化されており、実際の使用に合わせて適切な実装を行う必要があります。