フレンド関数 (教科書p.99〜)
初級編では、クラス内のprivateなメンバ(非公開のメンバ)にアクセスするには、メンバ関数を用意すればよいことを学びました。(忘れた人は、初級編の「クラス」の節を参照。)逆にいうと、秘密にした部分へのアクセスは、メンバ関数を利用しなければできないことになります。
しかし、関数をあるクラスのメンバにすることなく、関数からそのクラスの非公開部にアクセスしたいことがあります。このときに使用するのがフレンド関数(friend function)です。
ここでは、フレンド関数について説明します。
解説
(1)フレンド関数の用途
- 演算子のオーバーロードを実現する場合
- ある種の入出力関数を作成する場合
- 1つの関数から、2つ以上の別々のクラスにアクセスする場合
(2)フレンド関数の概念と具体例
練習課題2
- 教科書p.100のサンプルプログラムを入力し、コンパイル、実行してみなさい。ただし、プロジェクト名はp3kadai2w2とし、ソースファイル名はmain.cppとする。
- クラス宣言部のmyclassのフレンドを宣言している行をコメントアウトしてからコンパイルすると、どのようなメッセージが出るか確かめなさい。(「privateなメンバにアクセスできない」と言われることを確認する。)
- メンバ変数 n が奇数かどうかを判定するフレンド関数 isOdd をプログラムに追加しなさい。isOdd が正しく動作することを確認するためのコードをメイン関数に追加しなさい。
- メイン関数を記述したファイルmain.cppと、クラスmyclassの宣言を記述したヘッダファイルmyclass.h、フレンド関数を記述したファイルfriend.cppの3つに分け、正しくコンパイル、実行ができることを確かめなさい。2重インクルードの防止措置を施すこと。