[CPP] 演算子オーバーロードの糖衣構文的解釈とフレンド関数による解決

プログラミング言語 C++ における演算子オーバーロードの糖衣構文的な解釈と、フレンド関数による解決

1. 演算子オーバーロードの糖衣構文的な解釈

※ 説明をシンプルにするために参照渡しやconst修飾は省略しています。

 

上記のコードにおいて、 +演算子のオーバーロード

の糖衣構文(シュガーシンタックス)です。

メンバー関数名 "operator+" を "add" と意訳すると、下記のように書き換えることができます。

さらに下記のような演算子オーバーロードも考えることができます。

しかし、下記のような演算子のオーバーロードは『メンバー関数』として定義することはできません。

 

2. フレンド関数の演算子オーバーロード

そこで下記のようにフレンド関数の演算子オーバーロードをつかえば二項演算子の交換法則を正しく実装することができます。フレンド関数を使う目的はprivateなメンバー変数にアクセスすることにあります。もしメンバー変数がpublicであれば、必ずしもフレンド関数である必要性はありません。メンバー変数にアクセスできる非メンバーの関数でありさえすれば交換法則を実現することができます。