- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
드럼치는 프로그래머
[C/C++] friend 함수 본문
-------------------------------------------------------------
#include <iostream>
using std::cout;
using std::endl;
class Counter
{
int val;
public:
Counter() {
val = 0;
}
void Print() const {
cout << val << endl;
}
friend void SetX(Counter& c, int val); // (1)
};
void SetX(Counter& c, int val) // (2)
{
c.val = val;
}
int main()
{
Counter cnt;
cnt.Print();
SetX(cnt, 2002);
cnt.Print();
return 0;
}
-------------------------------------------------------------
(2)는 전역함수.
(1)은 전역함수 void SetX(..)를 friend로 선언.
friend 선언은 private나 public과 같은 접근 제어 키워드와는 상관이 없다.
따라서 클래스 내 어디에서든 선언이 가능하다.
friend 선언은 클래스들 간에도 가능하다.
-------------------------------------------------------------
#include <iostream>
using std::cout;
using std::endl;
class AAA
{
private:
int data;
friend class BBB; // (1)
};
class BBB
{
public:
void SetData(AAA& aaa, int val) {
aaa.data = val; // (2)
}
};
int main()
{
AAA aaa;
BBB bbb;
bbb.SetData(aaa, 10);
return 0;
}
-------------------------------------------------------------
(1)에서 class AAA가 class BBB를 friend로 선언.
(2)에서 class AAA의 private 영역에 접근.
friend는 단방향성을 지닌다. 위에서 AAA가 BBB를 friend로 선언했지만
BBB는 AAA를 friend로 선언하지 않았다.
* 추가설명
friend 선언은 한 방향으로만 접근할수 있다. 클래스 BBB가 클래스AAA의 친구이지만
클래스 AAA는 클래스 BBB의 친구가 아니다.
클래스 BBB가 클래스 AAA를 친구라고 선언하기 않았기 때문이다.
그래서 클래스 AAA에서는 클래스 BBB의 private 데이터 멤버를 접근할 수 없다.
[출처] [정리C++]friend|작성자 투더리
'★─Programing > ☆─C | C++' 카테고리의 다른 글
[C/C++] C++ 복사 생성자 - 1. 객체의 생성과 대입 & 2. 객체의 값에 의한 전달 (0) | 2009.11.27 |
---|---|
[C/C++] C 언어에서 일어날 수 있는 문제들 (0) | 2009.11.24 |
[C/C++] this 포인터 (0) | 2009.11.09 |
[C/C++] 클래스와 구조체의 유일한 차이점(접근제어) (0) | 2009.11.09 |
[C/C++] 정보은닉과 캡슐화 (0) | 2009.10.12 |