C++友元関数


シーン:通常の関数ではクラスの保護タイプのデータにアクセスできません.アクセスするにはpublic(共有)と宣言する必要があります.これにより、クラスのデータにアクセスおよび操作できる外部関数が発生します.C++ではfriend修飾子を使用して、設定した関数で保護タイプのデータにアクセスおよび操作できます.クラスメンバーをすべてpublicに設定しないで、データメンバーの安全を最大限に保護します.しかし,欠点は友元関数がクラスのパッケージ特性を破壊することであるが,それでもC++に必要な知識点として理解する必要がある.
例を見てみましょう.
#include <stdio.h>
#include <iostream>
using namespace std;

class C;

class B;

class A
{
public :
	A (int value)
	{
		this->value=value;
		cout<<"A:"<<value<<endl;
	}
	void showNumber(B &b);
	friend void CountValue(A &a ,B &b);

private:
	int value;
};

class B
{
public :
	B (int value)
	{
		this->value=value;
		cout<<"B:"<<value<<endl;
	}
	friend void A::showNumber(B &b);
	friend void CountValue(A &a ,B &b);
	friend class C;

private:
	int value;
};

class C
{
public:
	C(){};
	inline void setValue(B &b,int value)
	{
		b.value=value;
		cout<<"C:"<<value<<endl;
	}

};

void A::showNumber(B &b)
{
	cout<<"B value:"<<b.value<<endl;
}

void CountValue(A &a ,B &b) //void A::CountValue(A &a ,B &b)-->   
{
	std::cout<<"A + B cout:"<<a.value+b.value<<endl;
}

int main()
{
	A a(10);
	B b(20);
	C c;
	
	CountValue(a ,b);//A + B

	a.showNumber(b);//  B value

	c.setValue(b,88);//  88   B value

	a.showNumber(b);//  B value

	system("pause");
	return 0;
}
実行結果:
まとめ:
    :           ,     friend  ,            
  ,           。
                  eg: CountValue  AB     。
                      eg: A     showNumber B   
               eg: C B