フレンド関数

フレンド関数

クラスを作成する際、外部からはprivateのプロパティへアクセスすることはできません。しかし、フレンド関数として設定した関数なら、privateのプロパティやメソッドへアクセスできます。ここではフレンド関数の設定方法や使い方を解説します。

フレンド関数

クラスにはprivateとpublicがあり、

  1. private:クラス内部からしかアクセスできない
  2. public:クラスの外部からもアクセス可能

という違いがあります。プログラム作成で、どうしてもprivateのメソッドやプロパティへアクセスした場合があるかと思います。そういった場合は、フレンド関数を設定することで実現できます。

フレンド関数の定義は

class クラス名{

public:

friend 戻り値 フレンド関数名(引数);
};

戻り値 フレンド関数名(引数){
命令;
}

とします。ただ、クラス定義内部にfriendとしてフレンド関数として追加したい関数を加えるだけです。では試しにフレンド関数を使ってみましょう。

#include <iostream>
using namespace std;

class myclass{
	int a;
public:
	void input(int x){a=x;}
	int output(){return a;}
	friend void myfunc(int x,myclass obj);
};

void myfunc(int x,myclass obj){
	obj.a=x;
	cout<<obj.output()<<"\n";
}

int main(void){
	myclass myobj;
	myobj.input(3);
	myfunc(1,myobj);
	
    return 0;
}

実行すると

1

となります。myclassのプロパティaは外部からアクセスできませんが、myfuncはフレンド関数なのでアクセスできます。

そして、

	obj.a=x;
	cout<<obj.output()<<"\n";

となり、関数に引数として渡された1が表示されるわけです。

フレンド関数は複数のクラス間で演算を行いたい場合に使用できます。例えばクラスAとBがあって、AとBのprivateな値を使ってfuncCで演算をしたいとします。その場合、funcCをAとBのフレンド関数とすれば実現できます。

著者:安井 真人(やすい まさと)