LANG/C++
[C++]06-2.클래스와 함수에 대한 friend 선언
혀니리리
2023. 5. 13. 14:13
728x90
1)A클래스가 B클래스를 대상으로 friend선언을 하면, B클래스는 A클래스의 private멤버에 직접 접근 가능
2)단, A클래스도 B클래스의 private멤버에 직접 접근 가능하려면, B클래스가 A클래스를 대상으로 friend선언 해줘야함
class Boy
{
private:
int height; //키
friend class Girl; //Girl클래스를 friend로 선언함
public:
Boy(int len): height(len)
{}
. . . .
};
class Girl
{
private:
char phNum[20];
public:
Girl(char *num)
{
strcpy(phNum, num);
}
void ShowYourFriendInfo(Boy &frn)
{
cout <<"His height:" << frn.height << endl; //private함수에 접근
}
};
friend선언은 private, public상관 없음
<서로 선언 예제>
#include <iostream>
#include <cstring>
using namespace std;
class Girl; //Girl이라는 이름이 클래스의 이름임을 알림!
class Boy
{
private:
int height;
friend class Girl; //Girl클래스에 대한 friend 선언
public:
Boy(int len) : height(len)
{ }
void ShowYourFriendInfo(Girl &frn);
};
class Girl
{
private:
char phNum[20];
public:
Girl(char * num)
{
strcpy(phNum, num);
}
void ShowYourFriendInfo(Boy &frn);
friend class Boy; //Boy클래스에 대한 friend선언
};
void Boy::ShowYourFriendInfo(Girl &frn)
{
cout << "Her phone number: " <<frn.phNum << endl;
}
void Girl::ShowYourFriendInfo(Boy &frn)
{
cout << "His height: " <<frn.height << endl;
}
int main(void)
{
Boy boy(170);
Girl girl("010-1234-5678");
boy.ShowYourFriendInfo(girl);
girl.ShowYourFriendInfo(boy);
return 0;
}
friend선언은 언제?
정보은닉을 무너뜨리는 문법이므로 꼭 필요한 경우에만 사용해야 함,
함수의 friend 선언
전역함수를 대상으로도 클래스의 멤버함수를 대상으로도 friend선언 가능.
728x90