강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

꿀렁꿀렁님의 프로필 이미지
꿀렁꿀렁

작성한 질문수

홍정모의 따라하며 배우는 C++

9.2 입출력 연산자 오버로딩 하기

friend 키워드에 대한 개념이 안잡힙니다.

작성

·

254

2

안녕하세요.

아래와 같은 코드가 있다고 가정했을때,

첫번째 operator(friend 키워드가 없는)는 에러표시를 하고

두번째 operator(friend 키워드가 있는)는 정상 컴파일이 됩니다.

friend 키워드에 대한 강의도 앞에서 보았고,

'private 멤버 함수에 대한 접근이 가능하도록 해준다' 는 생각과 operator 코드 작성간의 상관관계가 무엇인지 모르겠습니다 ㅠ

// 아래 함수 정의에선 해당 오퍼레이터 함수에 인자값이 너무 많다고 하고,
std::ostream& operator << (std::ostream &out, const Point& point)
{

}
// friend 키워드를 붙일경우엔 정상 컴파일이 됩니다.
friend std::ostream& operator << (std::ostream &out, const Point& point)
{

}

 

답변 1

4

안녕하세요, 답변 도우미 Soobak 입니다.

 

외부함수인 std::operator << 함수가 Point 클래스의 private 멤버에 접근할 수 있도록 friend 선언을 해주는 것입니다.

 

private 멤버는 해당 클래스와 그 클래스의 멤버 함수에서만 접근이 가능합니다.
하지만, 때때로 외부 함수(이 경우에는 std::operator << 함수)나 다른 클래스가 이러한 private 멤버에 접근해야할 필요가 있을 수 있습니다.
이 때, friend 키워드를 사용합니다.

 

첫 번째 operator << 정의는 Point 클래스의 private 멤버에 접근할 수 없기 때문에 컴파일 에러가 발생하게 됩니다.
반면, friend 키워드를 사용하여 정의된 두 번째 operator <<Point 클래스의 private 멤버에 접근할 수 있기 때문에 정상적으로 컴파일이 되는 것입니다.

 

꿀렁꿀렁님의 프로필 이미지
꿀렁꿀렁

작성한 질문수

질문하기