演算子のオーバーロード: メンバー関数と非メンバー関数を使用する場合
演算子のオーバーロードでは、演算子が次のように宣言されると非対称が発生します。メンバー関数。単一のパラメーターが必要で、暗黙的に this ポインターを他のオペランドとして渡します。この非対称性により、オーバーロードされた演算子間の比較が制限されます。逆に、フレンド関数では、同じ型の 2 つの引数を渡して比較を可能にすることで、対称的なオーバーロードが可能です。
しかし、ポインタの左辺値と参照を比較できるにもかかわらず、なぜフレンド関数が好まれるのでしょうか?
まず、最初のオペランドがクラス型ではない場合、メンバー関数のオーバーロードは順序付けの問題に直面します。たとえば、10.0 s2 のような式は、メンバー関数のオーバーロードを使用すると無効です。
これに対処するために、プライベート メンバーにアクセスするとき、または順序付けの問題が発生するときに、非メンバーのフレンド関数を使用できます。オーバーロードされた関数をクラスのフレンドにすることで、プライベート メンバーにアクセスできるようになり、演算子のオーバーロードを柔軟に行うことができます。ただし、プライベート メンバー アクセスが必要でない限り、カプセル化を強化するために非フレンド非メンバー関数を使用することをお勧めします。
要約すると、フレンド関数は対称性を提供し、演算子のオーバーロードにおける順序付けの問題に対処します。非フレンド非メンバー関数はカプセル化を維持しながら、プライベート メンバーへのアクセスを可能にすることで、より高い柔軟性を提供します。 STL アルゴリズムは、順序の複雑さを回避し、演算子の使用の一貫性を維持するために対称バージョンに依存しています。
以上が演算子のオーバーロード: メンバー関数とフレンド関数 – いつどちらを選択すべきですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。