(출처: https://yeolco.tistory.com/116 ) [열코의 프로그래밍 일기:티스토리]


☞ freind 클래스란?

firend 클래스는 friend로 선언된 다른 클래스의 private 및 protected 멤버에 접근할 수 있음.

특정 상황에서 클래스 내에 접근하지 못하도록 private 제한을 두었는데, 필요의 경우 해당 클래스나 함수에서

접근 가능하도록 사용하는것이 friend 클래스 및 함수임.

사용법은 friend 키워드를 사용하여 클래스나 함수를 명시 해 주는 것 인데,

아래 예제는 friend 클래스를 지정해주는 예제코드임.

#include <iostream>
#include <string>
using namespace std;

class Friend1
{
	private:
	string name;

	friend class Friend2;
};

class Friend2 
{
	public:
	void set_name(Friend1& f, string s) 
	{
		f.name = s;
	}
	void show_name(Friend1& f) 
	{
		cout << f.name << "\n";
	}
};

int main(void) 
{
    Friend1 f1;
    Friend2 f2;

    f2.set_name(f1, "열코");
    f2.show_name(f1);

    return 0;
}

위 클래스를 보시면 Friend1 클래스와 Friend2 클래스가 있음.

Friend1 클래스에는 private 멤버 변수로 name이라는 string 변수가 존재함.

그 아래 보시면 friend class Friend2; 라는 코드가 보임.

이 코드가 바로 “나(Friend1)는 Friend2의 친구니까 내 개인적인 정보를 공유 해도 돼!” 라는 뜻임.

그리고 Friend2 클래스의 코드를 보시면 public 제한자의 함수 두개가 보임.


setter 함수와 출력 함수인데요, Friend1의 private 멤버인 name에 직접 접근하는것을 볼 수 있음.

친구니까 개인적인거 정도는 허용가능하겠죠?

이런식으로 private 멤버나 protected 멤버를 외부 클래스에서 접근할 수 있도록 하는것이 friend 키워드임.


ㅇ 출력 결과

열코


☞ friend 함수란?

friend 클래스와 마찬가지로 private 및 protected 멤버에 접근할 수 있는 권한을 부여할 수 있음.

friend 기능을 클래스단위가 아닌 멤버 함수 단위로 지정해 주는 것.

아래 코드를 확인해보시죠.

#include <iostream>
#include <string>
using namespace std;
 
class Friend1 
{
    private :
    string name;
 
    friend void set_name(Friend1&, string);
};
 
 
void set_name(Friend1& f, string s) 
{
    f.name = s;
    cout << f.name << "\n";
}
 
int main(void) 
{
    Friend1 f1;
 
    set_name(f1, "열코");
 
    return 0;
}

friend 키워드를 사용하여 set_name이라는 함수가 내 친구라는것을 컴파일러에게 알려주는 것임.

그래서 set_name 함수에서는 Friend1 클래스의 private 멤버인 name 변수에 접근이 가능한 것임.

생각보다 간단하고 쉬운 개념이죠?


* 주의사항

- 친구의 친구는 friend 키워드로 명시하지 않은 경우 친구 관계가 형성되지 않음.

- 친구의 자식도 마찬가지로 friend 키워드로 명시하지 않은 경우 친구 관계가 형성되지 않음.

카테고리:

업데이트:

댓글남기기