C++/Class
2021. 3. 16. 00:09
friend
- 클래스 내부에다가
friend
키워드 다음에 다른 클래스나 함수를 선언하면, 해당 클래스나 함수에서private
멤버에 접근할 수 있다.
예제
간단한 예제
#include <iostream> class A { int value_ = 1; friend void doSomething(A& a); }; void doSomething(A& a) { std::cout << a.value_ << std::endl; } int main() { A a; doSomething(a); } /* stdout 1 */
조금 귀찮은 예제
#include <iostream> class A; class B { int value_ = 2; public: void doSomething(A& a) { std::cout << a.value_ << std::endl; // 에러 } }; class A { int value_ = 1; friend class B; }; int main() { using namespace std; A a; B b; b.doSomething(a); }
error C2027: use of undefined type 'A'
class A
라고 전방 선언을 해도,class A
내부의 멤버 변수들은 알 수 없으므로 에러가 발생한다.해결법 : 함수의 정의와 선언을 분리하여
class A
의 아래 쪽에 정의한다.
#include <iostream> class A; class B { int value_ = 2; public: void doSomething(A& a); }; class A { int value_ = 1; friend class B; }; void B::doSomething(A& a) { std::cout << a.value_ << std::endl; } int main() { using namespace std; A a; B b; b.doSomething(a); }
'C++ > Class' 카테고리의 다른 글
C++ Nested Types (0) | 2021.03.16 |
---|---|
C++ 익명 객체 (Anonymous Class) (0) | 2021.03.16 |
C++ 정적 멤버 함수 (Static Member Function) (0) | 2021.03.16 |
C++ 정적 멤버 변수 (Static Member Variable) (0) | 2021.03.15 |
C++ static (Class) (0) | 2021.03.15 |