본문 바로가기
C++

friend 선언

by 상레알 2009. 1. 6.


friend 선언 은 전역 함수에게 private 영역 접근 허용 을 가능하게 한다!

friend 선언은 private이나 public 과 같은 접근 제어 키워드와는 상관이 없다. 따라서 클래스 내 어디서든 선언이 가능하다

문법은 간단하다 .

class A{
 int val;
public:
 A()
 {
  val =0;
 }
 void Print() const{
  cout<<val<<endl;
 }
 friend void SetX(A &c,int val);  //friend 선언
};
void SetX(A &c, int val)
{
 c.val = val;
}
int main()
{
 A b;
 b.Print();
 SetX(b,200);
 b.Print();
 return 0;
}

위와 같이 하면 된다 클래스끼리도 가능함.

하지만 여기서 유의해야 될것이 friend선언은 단방향성이다 <- 이말이 무슨말인고 하니

a클래스에서 b클래스를 friend함수로 선언햇을경우( //   friend class b   //   <- a 클래스 내에서 ) 

b클래스는 a 클래스 private에 접근할수있으나

a클래스는 b클래스에 private 접근할수 없다.



friend선언은 단방향성이다
그닥 유용한것은 아니다.
정보은닉에 위배 되기때문에
정보은닉이 무너지나..연산자 오버로딩에선 유용하게 사용된다
왠만해서는 연산자 오버로딩 전에 사용을 안햇으면 한다는////

friend선언으로만 해결 가능한 문제

그런것은 존재하지 않는다  - 연산자 오버로딩에서는 예외