Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 영어회화 100일의 기적
- BFS
- 그리디 알고리즘
- MST
- 생활코딩
- yolo
- 다음 API
- 인간이 그리는 무늬
- multiset
- DP
- boj
- 백트레킹
- upper_bound
- 창훈쓰다
- 언어의 온도
- 성화봉송
- BOJ 2098
- 비트마스크
- 이분탐색
- 평창동계올림픽
- 안드로이드 스튜디오
- 삼성 코딩테스트
- 위상정렬
- 성화봉송주자
- 다음 지도 api
- 외판원 순회
- Segment Tree
- lower_bound
- 다이나믹 프로그래밍
- 캘리그라피
Archives
- Today
- Total
Hoon222y
[1220-1] friend 키워드 본문
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(1, 1); 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 키워드와 함수 원형을 작성하여 전역 함수에서 접근 가능하도록 할 수 있다.
'코딩 > 교육' 카테고리의 다른 글
[1220-3] 첨자 연산자 오버로딩/ 변환 연산자 오버로딩 (explicit) / 변환 생성자 (0) | 2018.12.20 |
---|---|
[1220-2] 연산자 오버로딩 / 임시 객체 / 출력 연산자 오버로딩 (0) | 2018.12.20 |
[1219-5] 상수 멤버 함수 / mutable (0) | 2018.12.20 |
[1219-4] 유일한 객체를 선언하는 방법 (1) | 2018.12.19 |
[1219-3] 정적 멤버 - 정적 멤버 함수 / 함수 포인터 (0) | 2018.12.19 |
Comments