2012-06-19 2 views
13

C++의 친구 기능과 관련하여 의심의 여지가 있습니다. 프렌드 함수는 클레어의 멤버 함수가 아니며 메인에서 직접 호출 할 수 있습니다. 따라서 friend 기능을 private 또는 classpublic 부분에 유지하면 어떤 차이가 발생합니다. 나는 일반적으로 friend 함수가 항상 public 부분에 있다는 것을 알아 챘다. 어떤 시나리오에서 우리는 friend 함수를 private 안에 보관해야합니다.C++의 친구 기능

+1

나는 이것이 가까운 표를 얻는 이유를 모르겠다. 이것은 완벽하게 분별있는 질문이다. – ildjarn

+0

+1 - "언제 개인 친구 기능을 만드는 것이 좋은 디자인인가"는 완벽하게 훌륭한 질문입니다. (그렇지 않은 이유는 무엇입니까?) – djechlin

+5

"프렌드 선언은 클래스 선언의 아무 곳에 나 배치 할 수 있으며 액세스 제어 키워드의 영향을받지 않습니다." - http://en.wikipedia.org/wiki/Friend_function –

답변

19

컴파일러는 friend 함수가 클래스의 개인 또는 공용 (또는 보호 된) 섹션에 있는지 여부에 관심을 기울이지 않습니다. 대부분의 사람들은 그것을 공개 섹션에 넣지 만, 어디에 놓았는지에 관계없이 공개적으로 볼 수 있습니다.

4

클래스의 public: 또는 private: 부분에 선언하면 상관 없습니다. 그것은 상관없이 동일하게 작동합니다.

2

private 섹션에서 친구 선언을 사용하는 이유 중 하나는 액세스 권한이있는 멤버 함수 또는 개체와 함께 유지할 수 있다는 것입니다.

그 외의 경우에는 차이가 없습니다.

2

friend 키워드는 이 클래스의 일부가 아닌 다른 함수 private 액세스 권한을 부여 바로 여기에있다. 클래스의 일부가 아니기 때문에 public/private 지정자의 영향을받지 않습니다.

0

우정 선언을 어디에 두어도 상관 없습니다. 클래스 파트 (public, private 또는 protected) 중 일부에있을 수 있지만 함수 또는 집계 외부에 있어야합니다. 하나 개의 클래스는, 의 개인 변수를이 변수가 아마 만들 수 없습니다한다하더라도 다른 클래스를 참조하는 것이 유용한 경우가 많습니다

: 여기

는 www.cprogramming.com에서 좋은 예와 설명이다 클래스가 지원하는 공용 인터페이스의 일부 예를 들어, 이진 트리를 작성한 경우 개인 데이터가 포함 된 노드 클래스 을 사용할 수 있지만 노드를 실제로 결합하는 함수는 에 직접 데이터를 액세스 할 수있어 편리합니다 노드 인터페이스를 통해 작업하지 않아도됩니다. 때로는 에 접근 자 기능이 데이터에 간접적 인 액세스를 제공하는 것은 적절하지 않을 수도 있습니다.