過負荷のオペレーターのための操作手順 (1)

オーバーロードされた演算子には、特別な名前を持つ関数があります。
オーバーロードされた演算子の名前は、キーワード operatorの後に定義される演算子が続きます
オーバーロードされた演算子には、戻り値の型パラメーター リスト、および関数本体も含まれます。
オーバーロードされた演算子関数は、演算子が作用するオペランドの数と同じ数の引数を取りますたとえば、単項演算子は引数を 1 つ取り、二項演算子は引数を 2 つ取ります。
注意 ·:
オーバーロードされた関数呼び出し演算子 operator() を除いて、他のオーバーロードされた演算子はデフォルト パラメータを持つことができません。

メンバー演算子関数への (明示的な) 引数の数が演算子のオペランドの総数よりも 1 つ少ない理由は、最初の
左側のオペランドが暗黙的なthis ポインターにバインドされているためです。
演算子が組み込み型のオペランドに作用する場合、演算子の意味を変更することはできません
例:
int operator+(int, int);//エラー、int の組み込み演算子を再定義できませ
んオーバーロードされる のオペレータには、新しいオペレータを公開する権限がありません。
±*& は、単項演算子と 2 項演算子の両方であり、すべてオーバーロードできます。

オーバーロードされた演算子の
ここに画像の説明を挿入
使用は本質的に関数呼び出しである
ため、オペランドの評価順序に関するこれらの規則は、オーバーロードされた演算子には適用できません.一般に、コンマ演算子は
オーバーロードされません.そしてtake the address operator ****これらの 2 つの演算子は既に組み込みの意味を持っているため、それらがオーバーロードされると、それらの動作が通常とは異なり、クラスのユーザーが適応できなくなります。オーバーロードされた演算子を慎重に使用する演算子のオーバーロード 各演算子は、組み込み型で使用すると、より具体的な意味を持ちます。演算子のオーバーロードは、組み込み演算子と独自の操作の間に論理的なマッピングがある場合に最適に機能します。演算子のオーバーロードを過度に使用すると、クラスが理解しにくくなる可能性もあります。たとえば、operator+ を定義して減算を実行させるのは非常に不親切です。演算子は、操作の意味がユーザーにとって明確な場合にのみ使用してください。このような演算子を使用すると、ユーザーが演算子についていくつかの異なる解釈をする可能性がある場合、あいまいさが生じます。









代入演算子と複合代入演算子 代入演算子は複合バージョンのように動作します

: 代入後、左側のオペランドと右側のオペランドの値が等しくなり、演算子は左側のオペランドへの参照を返す必要があります。
オーバーロードされた代入演算子は、組み込みバージョンの意味に違反するのではなく、継承する必要があります。
クラスに算術演算子が含まれている場合は、対応する複合代入演算子も提供することをお勧めします。
演算子を定義するときは、まずメンバー関数が通常の非メンバー関数であるかどうかを判断し、それをクラスのメンバー関数として宣言するか、通常の非メンバー関数として宣言するかを決定する必要があります。

次のガイドラインは、演算子をメンバー関数として定義するか、通常の非メンバー関数として定義するかを決定するのに役立ちます。

● 代入 (=)、添え字 ([])、呼び出し (l)、およびメンバー アクセス矢印 (->) 演算子は、メンバーである必要があります。代入演算子とは異なり、複合代入演算子は一般にメンバーである必要がありますが、そうである必要はありません。
●インクリメント、パス、逆参照演算子など、オブジェクトの状態を変更する演算子、または特定の型に密接に関連する演算子は、通常、メンバーにする必要があります。
●対称性を持つ演算子は、算術演算子、等価演算子、関係演算子、ビット演算子など、オペランドを両端で変換する可能性があるため、通常は通常の非メンバー関数である必要があります。

おすすめ

転載: blog.csdn.net/2202_75623950/article/details/129478029