본문 바로가기
프로그래밍/C++

C++, friend 사용법.

by Hwan2 2019. 3. 11.
반응형

 

 

 

 

C++ 에선 friend 라는 키워드가 존재합니다.

 

friend를 선언하게 되면 private 맴버 변수의 접근이 가능해 집니다. 

 

예제를 보면....

#include<iostream>
#include<string>

using namespace std;

//class B;

class A {
private:
    int num;
    string name;
    friend class B;
public:

    A() {}

    A(int num, string name) {
        this->num = num;
        this->name = name;
    }
};

class B {
    A *a;
public:

    void createA() {
        a = new A(10, "haha");
    }

    int sum() {
        return a->num + 10;
    }

    void fix_Name(string name) {
        a->name = name;
    }

    void showA() {
        cout << a->name << endl;
    }
};

int main(void) {


    B b;

    b.createA();
    b.sum();
    b.fix_Name("choi");
    b.showA();

    return 0;
}

 

 

 

이런식으로 friend선언을 하게 됩니다.

 

여기서 Class A에 대한 변수 접근 방법은 중요한게 아닙니다.

 

중요한것은 Class B가 Class A의 private변수에 접근해서 그 변수를 사용하고 있다는 것이 가장 중요합니다.

 

이는 C++의 특징중 하나인 정보은닉은 위반하는 방법이기도 하며 남발할 경우 절대 좋은 코드가 될 수 없습니다.

 

또한 일반적인 선언이어서 Class A는 Class B의 private 맴버 번수에 접근이 불가능 합니다.

 

 

하지만 서로 friend선언을 해준다면 서로 접근이 가능 하겠죠??

 

friend선언은 가급적 하면 좋지 못하고 정말 심사숙고 하면서 써야하고,

 

만약 쓴다는 가정을 한다면........... 안쓰면 코드가 길어지고 손이 많이 갈 것 같을 때......

 

사용하시면 좋을 것 같습니다.

 

 

 

 

 

반응형

댓글


스킨편집 -> html 편집에서