티스토리 뷰

LANGUAGE/C++

[C++] FRIEND

진심스테이크 2018. 3. 14. 15:12

 

friend

- 접근 지정자에 상관없이 모두 public으로 인식하여 사용한다

- 캡슐화의 파괴 주범

- 코드의 확장을 위해 사용

- 원래 내꺼가 되어야 하는데, 접근할 수 없을 때 사용 -> 다 접근할 수 있게 권한을 줌

- 연산자 함수에서 사용

  ex) 3 + 객체

 

관계

1. friend class

2. friend method : 객체 안에 있는 특정 메소드만 friend 적용

3. friend function : 외부함수에서 접근

   - 가장 많이 씀

   - class A가 있고 class B가 있을 때, class A에 아무곳에 friend B; 라고 선언하면 B에 접근이 가능

#include "stdafx.h"
#include <iostream>
using namespace std;

class A {
    int money;
public :
    A(int pay = 10000) {
        money = pay;
    }

    void setMoney(int pay) { money = pay; }
    int getMoney() const { return money; }

    friend class B; //A 클래스 아무곳에서 선언가능
    //friend void B::disp(); //오류 - 인식이 안됨 : B가 존재하는지 모름
};

class B {
public : 
    void disp() {
        A aa;
        //cout << aa.getMoney() << endl;
        cout << aa.money << endl; //필드 직접 호출 - friend
    }
};

void main() {
    B bb;
    bb.disp();
} 
 
#include "stdafx.h"
#include <iostream>
using namespace std;

class A {
    int money;
public :
    A(int pay = 10000) {
        money = pay;
    }

    void setMoney(int pay) { money = pay; }
    int getMoney() const { return money; }

    friend void disp();
};

void disp() {
    A aa;
    cout << aa.money << endl; //friend 함수 지정 - 아니면 오류
}​

 

 

 

 

 

 

'LANGUAGE > C++' 카테고리의 다른 글

[C++] STRING 직접 구현  (0) 2018.03.15
[C++] OPERATOR FUNCTION - 연산자 함수  (0) 2018.03.14
[C++] STACK / QUEUE  (0) 2018.03.14
[C++] VIRTUAL FUNCTION - 가상 함수  (0) 2018.03.13
[C++] DYNAMIC BINDING - 동적 바인딩  (0) 2018.03.13
댓글