C++/Class
C++ friend
Caniro
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); }