フレンド関数

今までフレンド関数というものの存在意義が分からなかった。フレンド関数というのは、クラスのメンバ関数ではない関数から、メンバ変数を操作できるというものである。そもそも、フレンド関数の存在意義が分からなかった。クラスの外側のまったく関係の無い関数から、クラスの内部をいじくって、オブジェクト指向の意味を台無しにしかねないような機能である。

でも、既存のCコードと新規に作ったC++のクラス間をつぎはぎするとき、どうしてもムリが出てきてしまう。どうしてかというと、既存のCコードの関数が多すぎて、すべての関数をC++のクラスにまとめることができない。すべての既存のCコードを把握して、少なくとも何十、何百もある関数の相互関係をすべて認識した上で、クラスになんかできるわけがない。無理矢理オブジェクト指向でまとめるより、新規C++コードというまとまりと既存のCコードを別々に管理したほうが、よほどやりやすい。そういう時に、既存のCコードから新規C++コードへアクセスを許したいケースが出てくる。この場合に、グローバル変数を新たに作って既存Cコードから新規C++コードへ情報のやり取りをし始めることよりも、既存の関数を特別視して、その特別な関数のみ新規C++コードへやり取りをしたほうが、まとまりのある結果となる。結論としては、フレンド関数というのは、オブジェクト指向100%ではできないような場合に使われるらしい。