>백엔드 개발 >C++ >C의 Friend 선언이 클래스 멤버에 대한 액세스를 어떻게 제어할 수 있습니까?

C의 Friend 선언이 클래스 멤버에 대한 액세스를 어떻게 제어할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-20 15:16:26405검색

How Can Friend Declarations in C   Control Access to Class Members?

C의 Friend 선언 이해

C에서 friend 선언은 외부 클래스에 대한 액세스 권한을 부여하여 클래스 멤버에 대한 액세스를 제어하는 ​​방법을 제공합니다. 그렇지 않으면 보호되거나 비공개인 데이터 및 기능.

혜택 및 사용 사례

Friend 선언은 다음과 같은 경우에 유용할 수 있습니다.

  • 다른 클래스에서 액세스해야 하는 비공개 데이터나 기능이 있는 클래스가 있습니다.
  • "<<"와 같은 연산자를 오버로드하고 싶습니다. 그리고 ">>" 동일한 네임스페이스 내의 다른 클래스에 친구로 추가합니다.

캡슐화 위반 방지

friend 선언을 사용한다고 해서 반드시 캡슐화가 중단되는 것은 아닙니다. 동일한 네임스페이스 내에 정의된 특정 외부 클래스에 액세스합니다. 캡슐화를 줄일 수 있지만 필요한 경우 개인 데이터의 공유를 제어할 수 있습니다.

예: 과부하된 운영자를 위한 친구 액세스

다음 시나리오를 고려하십시오. "Point"라는 클래스에 대한 사용자 정의 스트림 삽입 및 추출 연산자를 만듭니다. 이를 달성하기 위해 친구 선언을 사용할 수 있습니다.

class Point
{
    int x, y;
    friend ostream& operator<<(ostream& out, const Point& point);
    friend istream& operator>>(istream& in, Point& point);
};

ostream& operator<<(ostream& out, const Point& point)
{
    out << "(" << point.x << ", " << point.y << ")";
    return out;
}

istream& operator>>(istream& in, Point& point)
{
    in >> point.x >> point.y;
    return in;
}

이 접근 방식을 사용하면 표준 "<<"를 사용하여 Point 개체를 입력하고 출력할 수 있습니다. 그리고 ">>" 연산자는 클래스가 캡슐화되어 있더라도 가능합니다.

친구 선언 사용 지침

  • 친구 선언은 필요한 경우에만 사용하세요.
  • 친구로 선언된 클래스 수.
  • 동일한 네임스페이스 내에서 친구 선언을 사용하여 친구로 선언하는 것을 방지하세요. 충돌 가능성이 있습니다.
  • friend 선언을 신중하게 사용하지 않으면 미묘한 버그가 발생할 수 있다는 점을 명심하세요.

위 내용은 C의 Friend 선언이 클래스 멤버에 대한 액세스를 어떻게 제어할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.