본문 바로가기

C++

C++ Friend

Friend란

대상 객체의 private영역도 확인하겠다 라는뜻이다.

A라는 객체의 Firend로 B객체를 선언하게되면 A객체는 B객체의 private영역도 확인할수있다.

 

#include"BBB.h"

class AAA
{
private:
	int number;
public :
	void Paint(BBB bb)
	{
		cout << "AAA : " <<  number << endl;
		cout << "AAA(BBB) : " << bb.number << endl;
	}
};
#include"AAA.h"

class BBB
{
	int number;
    void Paint()
	{
		cout << "BBB : " << number << endl;
	}
public:
	friend class AAA;
};

위의 예제를보면 AAA클래스에서 BBB클래스를 확인할때 BBB클래스에 number까지 확인할수있다.

Friend가 되어있지 않았다면 확인하지 못했을것이다.

 

다음으로는 함수의 Friend선언이다.

#include"BBB.h"

class AAA
{
};

void Paint(BBB bb)
{
	bb.number = 10;
}
#include"AAA.h"

class BBB
{
	int number;
public:
	friend void Paint(BBB bb);
};

BBB클래스에 Paint함수를 Friend선언을 해주었다. 그리하여 AAA클래스에서 정의한 Paint는 함수는 BBB클래스의

Friend함수이기때문에 BBB클래스의 private변수를 확인할수있다.

 

TMI

Friend선언은 논란이 많았다고한다. friend선이 객체지향의 대명사 중 하나인 정보은닉을 무너뜨리는 문법이기 때문에

그래서 friend 선언은 지나치면 아주 위험할 수 있다고한다. 사용할때 극히 소극적으로 사용해야 한다고 한다.

그리고 왠만해서는 사용을 하지 않는것을 추천 한다고 한다.

'C++' 카테고리의 다른 글

C++ 이란?  (0) 2020.08.11
C++ explicit  (0) 2020.07.30
C++ 구조체(struct)  (0) 2020.07.20
Inline함수  (0) 2020.01.19
C++의 Casting,형변환  (0) 2020.01.19