フレンド関数とフレンド演算子

課題1では,クラス内のprivateなメンバ(非公開のメンバ)にアクセスするには,メンバ関数を用意すればよいことを学びました.(忘れた人は,課題1の「クラス」の節を参照.)逆にいうと,秘密にした部分へのアクセスは,メンバ関数を利用しなければできないことになります.

オブジェクト指向設計の利点を活用するためには,privateメンバは非公開であるべきです.

しかし,左辺としてint等の組込み型を取る2項演算子や,異なるクラスの2つのオブジェクトに対しての2項演算子をオーバーロード定義する際など,演算子を定義するグルーバル関数の中でprivateメンバにアクセスしたい場合があります.

こうした要求に応えるために,C++には,関数をあるクラスのメンバにすることなく,関数からそのクラスの非公開部にアクセスする機能が用意されています.その機能がフレンド関数です.

ここでは,フレンド関数フレンド演算子について説明します.

練習課題

main.cppで下記の3通りの文字列連結ができるようにMyStringクラスを拡張せよ. s1, s2, s3, s4, s5はMyStringのオブジェクトとし,s1, s2にはそれぞれメンバ変数に文字列がセットされているものとする. また,本課題が完了したら,レポート課題のプログラムを実行せよ.

解説1: フレンド関数とフレンド演算子について

説明スライド

解説2: フレンド関数の用途

オブジェクト指向設計の利点を活用するためには,privateメンバは非公開であるべきです.上記のような演算子を定義する目的以外には,friend機能は使うべきではない,と認識しましょう.

フレンド演算子の補足