#include <iostream>
using namespace std;
class Example
{
public:
Example()
{
x = 3;
}
friend void Show(Example &ex);
private:
int x;
};
void Show(Example &e)
{
cout << "x is : " << e.x << endl;
}
int main(void)
{
Example ex;
Show(ex);
return 0;
}
우선 Show라는 함수의 정의 부분을 보자. 일반 멤버 함수의 정의와는 달리 Example라는 클래스에 있음에도 Example :: 이런 식으로 스코프(Scope)를 해 주지 않았다. 그럼 위로 올라가 Example클래스의 Show함수의 선언을 보자. 특이한 키워드가 붙어 있을 것이다. friend 이 키워들를 붙이면 Show라는 함수는 이 클래스의 멤버 함수가 아니게 된다. 굳이 구분하자면 전역 함수쯤 될 것이다.
main함수 안에서 Show의 사용을 보자. ex.Show()가 아닌 그냥 Show()로 불러 들였다. 그리고 인자를 보면 ex라는 객체를 레퍼런스로 넣었다. 외부 함수라는 것이다. 그런데 실행을 해 보면 신기하게 ex라는 객체에 private로 선언되어 있는 멤버 변수 x의 값을 불러 온것을 알 수 있다. 즉 friend 함수는 예외적으로 클래스 내부의 멤버에 접근 할 수 있게 해 주는 역할을 한다.