[C++] friend 클래스 / 함수
안녕하세요.
playground입니다.
이번 포스팅에서는 c++에 쓰이는 friend클래스와 함수에 대해 알아보겠습니다.
friend 클래스
friend 함수
friend class란?
c++에서는 A, B 클래스가 존재한다고 할 때,
클래스 안에 private나 protected 멤버들은 서로 접근을 하지 못합니다.
이 때 A에서 B를 friend 클래스로 선언해주면 B에서 A클래스의 private, protected 멤버에 직접 접근이 가능합니다. |
여기서 중요한 건 당하는 쪽 (A, 아래 예제에서는 me클래스)에서
bank(은행) 클래스 를 friend class로 선언해주면
은행 클래스(B)에서 당한 쪽 클래스를 마음대로 가져다 쓸 수 있다는 것입니다.
"내(A) 입장에서는 친구는 은행(B)야!
그러므로 B에서는 내(A) 모든 걸 가져다 쓸 수 있어!"
하지만 B의 생각은 다른가봅니다.
A는 B의 private, protected멤버를 가져다 쓸 수 없습니다.
friend class 코드 예
1) 먼저 클래스 cMe와 cBank를 아래와 같이 만들고 cMe(나) 클래스에서 friend class로 cBank(은행)을 선언해줍니다.
2) main함수에서 cMe(나)와 cBank(은행) 객체를 만들고 아래와 같이 은행에서 인출해줍니다.
이 때 cMe(나)클래스에서 프랜드 클래스로 은행을 선언했으므로 은행에서는 내 정보를 가지고 돈을 인출해갑니다.(ㅠㅠ)
<결과값>
프랜드 클래스로 선언했으므로 은행에서는 내 정보에 접근해 돈을 가져갈 수 있습니다.
friend 함수
friend함수란 전체 클래스가 아닌 특정 함수만 friend함수로 선언하는 걸 이야기합니다.
아래 예제를 보겠습니다.
1) 먼저 cBank를 클래스에서 Test1와 Test2 테스트 함수를 만들어줍니다.(위에 class cMe 전방선언)
2) cMe클래스에서 프랜드 함수로 cBank의 Test1만 선언해줍니다.
그러면 friend 클래스와는 달리 cBank의 Test1 함수에서만 cMe를 쓸 수 있게 됩니다.
3) Test2함수에서는 에러가 뜨네요. cMe클래스의 private멤버에 접근할 수 없다고 뜹니다.
Test1 함수만 프랜드 함수이므로 cMe클래스에 접근할 수 있습니다.
<결과값>
'Programming > C++_C#' 카테고리의 다른 글
[C++] 예외 처리 try - catch 블록의 자세한 사용 방법과 예제 코드 (0) | 2023.07.30 |
---|---|
[c++] LPCTSTR -> LPTSTR 변환 (0) | 2022.09.08 |
[C++] test dword ptr [eax],eax ; probe page. 오류 해결 (0) | 2021.09.24 |
[C++] priority_queue (오름차순/내림차순 큐) (0) | 2021.08.31 |
[C++] string 기능 - substr/find/rfind (0) | 2021.03.30 |