C++ - 다른 클래스의 특정 멤버 함수만을 friend로 선언

보통 다른 클래스를 friend로 선언할 때 그 클래스 전체를 선언하는 경우가 많은데 클래스 전체가 아닌 일부 멤버 함수만을 friend로 선언할 수 있다.

struct TEST2;

struct TEST1
{
    void T1();
    void T2();
};
 
struct TEST2
{
    friend void TEST1::T1();

private:
    int m_nValue;
};

void TEST1::T1()
{
    TEST2 t2;
    t2.m_nValue = 1;
}

void TEST1::T2()
{
    // 아래 주석을 제거하면 컴파일 에러
    //TEST2 t2;
    //t2.m_nValue = 1;
}

위 코드는 TEST1의 T1()은 TEST2의 모든 멤버에 접근할 수 있지만 T2()는 TEST2의 public 멤버에만 접근할 수 있다.


이 글은 2020-07-06에 작성되었습니다.