C ++에서 친구 선언-공개와 비공개의 차이점


144

친구 기능 / 클래스를 비공개 또는 공개로 선언하는 것에는 차이가 있습니까? 온라인에서이 내용을 찾을 수 없습니다.

나는 다음의 차이점을 의미합니다.

class A
{
 public: 
      friend class B;
 };

class A
{
 private: //or nothing as the default is private
      friend class B;
 };

차이가 있습니까?


29
그런 잘못된 정보 ... 누군가 친구가 될 자격이 없었습니다. 친구와 사적인 관계를 좋아하는지 여부는 전적으로 귀하에게 달려 있습니다.
Tony Delroy 2016 년

친구 수업이 무엇인지 물어봐도 될까요? '(?
I Phantasm I

3
@I Phantasm- friend클래스 의 인스턴스가 선언 private을 한 클래스에서 선언 된 멤버에 액세스 할 수있게하는 선언입니다. 이 예의 경우, 클래스 B의 인스턴스는 클래스 A의 개인 멤버에 액세스 할 수 있습니다.
BIU


2
이 질문은이 사이트에서 너무 많은 점수를 얻었습니다. 그럼
BIU

답변:


141

아니요, 차이점은 없습니다. 클래스 B는 클래스 A의 친구이며 이제 개인 및 보호 된 멤버에 액세스 할 수 있습니다.


5
그래서 누가 말했는지에 대해서는 그들이 무슨 말을했는지 몰랐습니다. 감사합니다 :)
BIU

그러나 문서화 목적으로 friend구현 세부 사항 또는 인터페이스의 일부 를 고려 하시겠습니까?
TemplateRex

1
@TemplateRex : 인터페이스의 일부인 IMO- class Friend현재 클래스의 모든 비공개 멤버에 액세스 할 수있는 (임의의) 일부가 있다는 것은 매우 강력한 주장입니다 .
sharptooth

임의의 클래스의 경우 예. 그러나의 operator==(T, T)개인 데이터 멤버를 T사용 friend하여 구현 operator==하고 멤버가 아닌 것으로 나타날 수 있도록 구현 세부 사항으로 사용한다고 가정하십시오 . IMO,이 우정은 공개 인터페이스에 나타나지 않아야합니다 (Doxygen에 의해 생성 될 것입니다)
TemplateRex

나는 몇 시간 전에 스택 오버 플로우에서 읽었으며, 일부 컴파일러는 오래된 버그가있는 컴파일러가 공개되지 않은 지역 내에서 친구 선언이 발생하면 혼란 스러울 것이라고 생각합니다.
Peregring-lk

36

구문 friend class B은 클래스 의 멤버 를 선언하지 않으므로 클래스 A를 작성하는 위치는 중요하지 않으므로 class B는 class 의 친구입니다 A.

당신이 쓰는 경우에도 friend class B에서 protected의 섹션 A, 그것은 그 말은하지 않습니다 B만 액세스 할 수 있습니다 protectedpublic의 구성원 A.

B번의 친구가 A되면, 어느 섹션 에서든 어떤 회원 이든 액세스 할 수 있다는 것을 항상 기억하십시오 .Afriend class B


3
그래서 누가 말했는지에 대해서는 그들이 무슨 말을했는지 몰랐습니다. 감사합니다 :)
BIU

-2

친구 선언은 클래스 본문에 나타나고 친구 선언이 나타나는 클래스의 비공개 및 보호 된 멤버에게 함수 또는 다른 클래스 액세스 권한을 부여합니다.

이러한 액세스 지정자는 친구 선언의 의미에 영향을 미치지 않습니다 (비공개 : 공개 또는 공개 섹션에 표시 될 수 있음).


새로운 것이 아닌 7 살짜리 질문에 대답하기. 물건을 더 많이 복제하지 마십시오.
MAChitgarha
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.