C++でクラスでフレンド関数を使用するときのメモ。
INDEX
フレンド関数
フレンド関数を使用すると、2つ以上のクラスの非公開メンバにアクセスすることが出来る。
-
フレンド関数のサンプルコード
-
[code]
#include
using namespace std;class SampleClass {
int a, b;
public:
SampleClass(int i, int j) { a = i; b = j; }public:
// フレンド関数のプロトタイプ宣言(フレンドキーワードあり)
friend int sum_it(SampleClass obj);
};// フレンド関数の定義(フレンドキーワードなし)
int sum_it(SampleClass obj)
{
// クラスの非公開メンバにアクセスし2つの値の和を返す
return obj.a + obj.b;
}int main(int argc, const char * argv[])
{
int x,y;cout << "1つめの整数を入力 : "; cin >> x;
cout << "2つめの整数を入力 : "; cin >> y;SampleClass sample(x,y);
cout << "合計 : " << sum_it(sample); return 0; } [/code]
- 結果
-
[code]
1つめの整数を入力 : 10
2つめの整数を入力 : 100
合計 : 110
[/code]
サンプルコードの補足説明
- SampleClass の宣言の中でコンストラクタ関数と、フレンド関数 sum_it() を宣言している。
- sum_it()関数は SampleClass のフレンドであるが、フレンドであるクラス SampleClass のメンバではない。そのため obj.sum_it(); のようにアクセス演算子を使用しフレンド関数を呼び出すことはできない。
- フレンド関数からフレンドであるクラスの非公開要素にアクセスするためには、そのクラスのオブジェクトを介さなければいけない。
- フレンド関数は継承されないため、基本クラスにフレンド関数が含まれていても、派生クラスのフレンド関数にはならない。
- フレンド関数は複数のクラスのフレンドになることができる。
まとめ
フレンド関数はオブジェクトを介せば複数クラスのメンバにアクセスし、異なるクラスの中の共通する要素を評価するといった使い方もできます。