티스토리 뷰
friend
#includeclass CComplex{ float a, b; public : CComplex(float ta = 0.0, float tb = 0.0) { a = ta; b = tb; } void Add(CComplex c) { a += c.a; b += c.b; } }; int IsEqual(CComplex a, CComplex b) { return a.a==b.a && a.b==b.b ; } void main() { CComplex a(1.0, 2.0), b(1.0, 2.0); printf("%d \n",IsEqual(a, b)); }
위 프로그램은 컴파일이 되지 않는다. 이유는 IsEqual()이 CComplex의 private 멤버 a와 b를 접근하기 때문이다.
이에 대한 해결 방법으로 friend를 사용할 수 있다. 즉, CComplex가 IsEqual()을 friend 함수로 선언하는 것이다.
friend로 선언되면 모든 멤버에 대해 접근이 가능하다.
아래와 같은 코드를 CComplex안에 추가해야한다.
friend int IsEqual(CComplex a, CComplex b);
주의할 점
- CComplex 안에서 IsEqual을 friend로 선언 !
- friend 함수는 멤버함수가 아니므로 CComplex::IsEqual()과 같이 하면 안된다.
- IsEqual()을 정의하는 쪽에 friend란 키워드를 사용하면 안된다.
- A가 B의 친구이고, B가 C의 친구라고 해서 A가 C의 친구는 아니다.
'programming language > c++' 카테고리의 다른 글
[c++] 복사생성자, 깊은 복사(Deep Copy) (0) | 2018.07.05 |
---|---|
[c++] struct와 class의 차이 (0) | 2018.06.14 |
[c++] StringCbCopy, StringCchCopy (1) | 2018.06.12 |
[c++] malloc/free, new/delete (0) | 2018.06.11 |
[C++] MultiByteToWideChar, WideCharToMultiByte 함수 (0) | 2018.06.07 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 백준알고리즘
- adapter
- Android
- handshake
- C++
- debug
- 네트워크
- layout
- 퀵정렬
- C
- ConstraintLayout
- 운영체제
- frameLayout
- windows
- HTTP
- RelativeLayout
- OS
- 안드로이드
- 백준
- 윈도우
- 스프링부트
- 스프링
- 정렬 알고리즘
- WinDbg
- 이진탐색트리
- listview
- LinearLayout
- 알고리즘
- DATABASE
- BOJ
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함