본문 바로가기

IT 관련자료/C++

friend 함수

#include <iostream>


using namespace std;
// forward declaration <1> 
// 하지만 얘의 정의가 어딨는지 찾아야 하는 번거러움 발생.
class B; 

class A
{
private:
    int _value = 1;

    //A 클래스에서 B클래스한테 친추검 <2>
    friend B;

    //friend 키워드와 함수의 프로토 타입을 class안에 넣어주면 접근가능
    friend void doSomething(A& a);
    //여기서 class B가 밑에있어서 class A에서는 알 방도가 없음
    //그래서 위에서 forward declaration을 해줄수 있음 <1>
    friend void doSomething2(A& a, B& b);
};

class B
{
private:
    int _value = 2;

public:
    friend void doSomething2(A& a, B& b);

    void doSomething3(A& a)
    {
        //여기서 일반적인 상황에서는 a._value를 불러올 수 없지만 
        //class A에서 B한테 친추걸면 가능<2>
        cout << a._value << endl;
    }

};

void doSomething2(A& a, B& b)
{
    cout << a._value << " " << b._value << endl;
}


void doSomething(A& a)
{
    //private라서 접근못함.
    //하지만 친구라서 접근 가능ㅋㅋㅋ
    cout << a._value << endl;
}

int main()
{
    A a;
    B b;

    doSomething(a);

    b.doSomething3(a);


    return 0;
}

'IT 관련자료 > C++' 카테고리의 다른 글

클래스 안에 포함된 자료형  (0) 2022.03.01
익명객체  (0) 2022.03.01
정적맴버 함수(static member function)  (0) 2022.02.28
class - 정적 맴버 변수(static)  (0) 2022.02.25
클래스와 const  (0) 2022.02.25