friend 함수

2020. 9. 10. 15:50컴퓨터 수업/C++

@프렌드함수

프렌드(friend) 함수는 클래스의 멤버 함수가 아니면서 클래스의 전용(private) 데이터 멤버에 접근할 때 사용하는 함수이다.

이때, 클래스의 멤버 함수가 아니라면,  일반 함수 또는 다른 클래스의 멤버 함수가 될 수 있겠다.

일반 함수 또는 다른 클래의 멤버함수 (외부함수)가 특정 클래스의 전용 데이터 멤버를 참조해야 하는 경우가 생겼을때, 외부 함수를 특정 클래스의 프렌드 함수로 선언하면 해당 클래스의 전용 데이터 멤버들을 참조할 수 있다.

프렌드 함수를 사용하기 위해서는 클래스의 프렌드로 사용할 함수의 원형을 클래스 내부에 선언하고 그 앞에 예약어 friend를 붙인다.

 

@드는 생각

private 데이터멤버에 접근할 수 있는자는 누가 있을까? 바로 멤버함수밖에 없다.따라서 해당 멤버함수가 아닌 main함수에서 그저 데이터멤버를 호출하는 방법은 friend가 될 수 있겠다.

즉, 데이터멤버에 직접 접근하고 싶다는 생각이 들면 멤버함수 + 프렌드함수를 생각해봐야한다.

 

@예시 코드

#include <iostream>
using namespace std;
class myclass
{
private:
	int x, y;
public:
	myclass(int i = 200, int j = 100); // default argument는 선언부에
	friend int add(myclass); // @@@@@ argument로 class를 받는것이 당연해보여야한다.
                             // 이 아규먼트의 접근이 허용되는것.
};
myclass::myclass(int i, int j)
{
	this->x = i;
	this->y = j;
}
int add(myclass a)
{
	return a.x + a.y; // 데이터멤버에 접근하는 모습이다.
}
int main()
{
	myclass b;
	cout << "add(b) = 200 + 100 = " << add(b) << endl;
}