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선언으로만 해결 가능한 문제
그런것은 존재하지 않는다 - 연산자 오버로딩에서는 예외
'C++' 카테고리의 다른 글
클래스와 Static (0) | 2009.01.15 |
---|---|
클래스와 const (0) | 2009.01.14 |
복사 생성자가 호출되는 시점 (0) | 2009.01.08 |
복사생성자 (0) | 2009.01.08 |
const 함수 (0) | 2009.01.06 |
This 포인터 (0) | 2009.01.06 |
열혈강의 연습문제 4-2 /생성자/소멸자/객체 포인터 동적 할당/해체/문자입력받아서 순서대로 출력 (0) | 2009.01.06 |
malloc 함수와 new 연산자의 차이 (0) | 2009.01.05 |
소멸자의 특징과 필요성 (0) | 2008.12.30 |
생성자와 객체의 생성 과정 (0) | 2008.12.30 |