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