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
'LANG > C++' 카테고리의 다른 글
[C++]07-1.상속에 들어가기에 앞서 (0) | 2023.05.14 |
---|---|
[C++]06-3.C++에서의 static (1) | 2023.05.13 |
[C++]06-1.const와 관련해서 아직 못다한 이야기 (0) | 2023.05.13 |
[C++]05-3.복사 생성자의 호출시점 (0) | 2023.05.13 |
[C++]05-2.'깊은 복사'와 '얕은 복사' (0) | 2023.05.13 |