포스트

[1일 1블로그 무사고 5일] C++ friend에 대해서

friend 키워드

friend 키워드는 C++98 표준의 출시와 함께 처음 표준화되었음.
friend 키워드는 클래스 자체의 일부가 아닌 함수나 다른 클래스에 대한 클래스의 private 및 protected 멤버에 대한 액세스 권한을 부여하는데 사용됨
기본적으로 이는 외부 엔티티가 클래스의 private 및 protected 멤버에 대한 특별한 액세스 권한을 갖도록 허용함.

friend class

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class A
{
    int a = 5;
    friend class B;

public:
    void Print()
    {
        cout << a << '\n';
    }
};

class B
{
    int b = 3;

public:

    void PrintA(A& cA)
    {
        cout << cA.a << '\n';
    }

    void Print()
    {
        cout << b << '\n';
    }
};

int main()
{
    A cA;
    B cB;

    cA.Print();
    cB.Print();

    cB.PrintA(cA);

    return 0;
}

여기서 A는 B를 friend class B를 이용해 B가 A의 private 및 protected 변수에 접근할 수 있도록 지정했다.
반대로 A는 B의 멤버들을 접근하지는 못한다.

friend 함수

클래스에 friend 키워드로 특정 함수를 지정하면 그 함수에서 클래스의 private 및 protected에 접근할 수 있다. 다른 클래스의 멤버 함수도 지정이 가능하다.

주의할 점

클래스 A와 B가 친구이고 B와 C가 친구일 때 A와 C는 친구일까?? 아니다. friend 키워드로 명시하지 않는 이상 접근이 불가
친구의 자식도 마찬가지로 friend 키워드로 명시하지 않을 경우 접근이 불가

주로 쓰이는 곳

C++에서 클래스에 대해 연산자를 오버로딩할 때 주로 쓰인다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.