c++ friend 예제

함수 템플릿과 클래스 템플릿 선언은 모두 로컬이 아닌 클래스 또는 클래스 템플릿에 friend 지정기와 함께 나타날 수 있습니다(함수 템플릿만 우정을 부여하는 클래스 또는 클래스 템플릿 내에서 정의될 수 있음). 이 경우 템플릿의 모든 특수화는 암시적으로 인스턴스화되거나 부분적으로 특수화되거나 명시적으로 특수화되어 있는지 여부에 관계없이 친구가 됩니다. 우정은 명시적으로 명시되지 않는 한 상호 관계가 아닙니다. 위의 예에서 YourClass의 멤버 함수는 YourOtherClass의 개인 멤버에 액세스할 수 없습니다. 친구 선언에서 선언된 친구 클래스 함수를 보여 주는 간단하고 완전한 C++ 프로그램은 외형 키워드를 사용하여 선언된 것처럼 처리됩니다. 자세한 내용은 extern을 참조하십시오. 함수가 클래스의 friend 함수로 정의되면 해당 함수는 모든 개인 및 보호된 데이터에 액세스할 수 있습니다. 위의 예에서 min() 함수는 두 클래스, 즉 min() 함수가 클래스 A와 B 의 개인 멤버에 액세스할 수 있습니다. friend 함수는 클래스의 구성원이 아니지만 클래스의 개인 및 보호된 멤버에 액세스할 수 있는 함수입니다. 친구 기능은 클래스 멤버로 간주되지 않습니다. 특수 액세스 권한이 부여되는 일반 외부 함수입니다. 친구는 클래스의 범위에 있지 않으며 다른 클래스의 구성원이 아닌 경우 멤버 선택 연산자(및 ->)를 사용하여 호출되지 않습니다. 친구 함수는 액세스 권한을 부여하는 클래스에 의해 선언됩니다.

친구 선언은 클래스 선언의 아무 곳에나 배치할 수 있습니다. 액세스 제어 키워드의 영향을 받지 않습니다. 앞의 예제에서는 함수 A::Func1(B&)만 클래스 B에 대한 친구 액세스 권한이 부여됩니다. 따라서 개인 멤버 _b에 대한 액세스는 클래스 A의 Func1에서 정확하지만 Func2에서는 올바르지 않습니다. 친구 F를 사용하여 템플릿 매개 변수를 친구로 선언합니다: 다음 예제에서 친구 F는 NS 범위 밖에서 선언된 F 클래스를 나타냅니다. 데이터에 액세스하기 위해 친구 함수선언은 키워드 친구로 시작하는 클래스의 본문 내에서 수행해야 합니다. 클래스 ClassOne의 모든 멤버 기능을 선언하려면ClassOne의 친구로, 클래스 ClassOne – 친구 기능처럼 친구 기능의 정의에 다음과 같은 선언을 배치, 친구 기능은 개인 및 보호 회원에 액세스 할 수있는 특별한 부여를 부여 할 수 있습니다 . 친구 함수는 다음과 같이 할 수 있습니다: a) 다른 클래스 b의 메서드) 전역 함수 또는 함수 템플릿은 클래스 본문 앞에 템플릿으로 선언되어야 하며, 이 경우 Foo 내의 친구 선언은 해당 T에 대한 operator<<의 전체 전문화를 참조할 수 있습니다. : 액세스 지정자는 friend 선언의 의미에 영향을 미치지 않습니다 (비공개 또는 공용 : 섹션, 차이 없음) 앞의 예제는 클래스 이름을 Scope로 입력하지만 전체 선언은 구체적으로 기능을 선언하는 부분은 IsAFriend – 알 수 없습니다. 따라서 클래스 HasFriends에서 친구 선언 오류를 생성 합니다. 클래스의 친구로 함수를 선언하려면 다음과 같이 키워드 친구와 클래스 정의의 함수 프로토 타입 앞에 – 친구 함수처럼, 클래스는 다른 클래스의 친구가 될 수 있습니다.

カテゴリー未分類