[C++] friend 클래스와 함수
(출처: 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 키워드로 명시하지 않은 경우 친구 관계가 형성되지 않음.
댓글남기기