Hoon222y

[1220-1] friend 키워드 본문

코딩/교육

[1220-1] friend 키워드

hoon222y 2018. 12. 20. 19:18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
using namespace std;
//mutable : 상수 멤버 함수 안에서 값의 수정을 가능하게 하는 키워드
struct Cache{
    mutable char str[32];
    mutable bool is_cached;
    Cache(bool cached = false) : is_cached(cached){}
};
class Point{
public:
    int _x, _y;
    Cache* pCache;
    Point(int x, int y) : _x(x), _y(y), pCache(new Cache){};
    ~Point(){ delete pCache; }                              //동적할당 했으니 소멸자로 해제해준다.
    
    const char* to_str() const{                             //const char* to_str(const Pont* comst this)이므로
        if (!pCache->is_cached){                            //지금 Cache* pCache 는 못바꾼다고 생각할 수 있겠지만
            sprintf(pCache->str, "(%d, %d)", _x, _y);       //그 안에 mutable 이므로 그 안에서 바꿀 수 있다.
            pCache->is_cached = true;
        }
        return pCache->str;
    }
};
int main(){
    Point p(11);
    cout << p.to_str() << endl;
    cout << &p<<endl;
    Point p2(2,2);
    cout << &p2 <<endl;         //여기서 &p와 &p2의 결과 값은 같다.
}
cs


 해당 코드의 경우 어제 한것에 이어서 진행이 되었으며, 숙제 같음.  동적할당이 되면 반드시 소멸자에서 해제 해주어야 하며, Cache* pCache 변수를 두어서 Cache가 하나만 생성되도록 하였다. 


friend 키워드 : 클래스 외부에서 클래스 내부의 멤버에 자유롭게 접근할 수 있도록 허용하는 키워드이다. 외부의 전역함수를 friend로 지정할 때는 클래스의 선언문 안에 원형을 작성하고, friend 키워드를 붙인다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Int32{
    int val;
public:
    Int32(int value = 0) : val(value){}
    //friend 를 이용하여 private 영역에 있는 변수를 외부에서 사용할 수 있게 만들어줌
    friend void print_int32(const Int32& i);    
};
void print_int32(const Int32& i){
    cout << i.val << endl;
}
int main(){
    Int32 i;                //인자가 없는 생성자를 사용하여 객체를 생성
    print_int32(i);
}
cs


원래였으면  전역함수는 class 내부에 private 로 선언 된 부분에 접근할 수 없겠지만 friend 키워드와 함수 원형을 작성하여 전역 함수에서 접근 가능하도록 할 수 있다. 



Comments