C++/summary

프렌드와 연산자 중복

gandus 2010. 6. 10. 12:50


클래스 <=> 프랜드 전역함수
클래스 <=> 프랜드 클래스
클래스 <=> 프랜드 멤버함수
    - > 친구가 되면 , 비공개 멤버에 접근할수 있다.
      - > 구현하기가 쉬워진다. -> 가급적이면 조금만 사용하라 -> 관리하기가 힘들다.


프렌드 함수 선언 방법


프렌드 함수의 원형은 비록 클래스 안에 포함
하지만 멤버 함수는 아니다.
프렌드 함수의 본체는 외부에서 따로 정의
프렌드 함수는 클래스 내부의 모든 멤버 변수를 사용 가능


class Company {
private:
 int sales, profit;

 // sub()는 Company의 전용 부분에 접근할 수 있다.
 friend void sub(Company& c);

public:
 Company(): sales(0), profit(0) {  }
};

void sub(Company& c)
{
   cout << c.profit << endl;     // 비공개된 변수에 접근이 가능하다.
}

int main()
{
   Company c1;
   sub(c1);
   return 0;
}

 -> 일반적으로 멤버변수, 생성자 , 소멸자, 멤버 함수 그 다음에 프렌드가 위치하는게 좋다




프렌드 클래스

friend class Manager;



프렌드 함수의 용도

① 일반 멤버 함수 사용

if( obj1.equals(obj2) )
{
 ...
}

② 프렌드 함수 사용

if( equals(obj1, obj2) )
{
 ...
}


Complex add(Complex a1, Complex a2)
{
 return Complex (a1.re+a2.re, a1.im+a2.im); // 생성자를 리턴???
        -> 이것은 Complex temp (a1.re+a2.re, a1.im+a2.im)
        -> return temp 와 같은말이다.
}

int main()
{
 Complex c1(1,2), c2(3,4);
 Complex c3 = add(c1, c2);
 c3.Output();
 return 0;
}

생성자 강제호출 - > 이름없는 객체가 생성됨


1. 프렌드 함수란 무엇인가?  -  클래스의 내부 데이터에 접근할 수 있는 특수한 함수
2. 어떤 경우에 프렌드 함수가 유용한가?  - 비공개 멤버에 접근 하고자 할때.
3. 두 개의 Vector 객체를 더하는 프렌드 함수를 정의하라.