#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;
}