演算子のオーバーロードをフレンド関数に登録する
ロベールのC++入門講座 11-11
グローバルな演算子のオーバーロードをするときに、その対象のクラスのプライベートな変数や関数が見えたほうが良いケースがあります。
そういう場合のために予めクラス側で対象となる演算子のオーバーロードをフレンド関数に登録しておくと便利です。
class CSample { // グローバルな+演算子をフレンド関数登録しておく friend CSample operator+(int num,CSample& obj); public: CSample () { m_num = 100; } CSample operator+(CSample& obj) { CSample ret; ret.m_num = this->m_num + obj.m_num; return ret; } private: int m_num; }; CSample operator+(int num,CSample& obj) { CSample ret; // フレンド関数登録されてるのでprivateなm_numに直接アクセスできる ret.m_num = obj.m_num + num; return ret; }
あまり意味のない例ですが、雰囲気としてはこんな感じです。
こういうケースなら確かにfriendが役に立つのかもしれませんね。