>백엔드 개발 >C++ >클래스 내에 정의된 Friend 함수에 액세스하는 방법은 무엇입니까?

클래스 내에 정의된 Friend 함수에 액세스하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-05 15:45:02807검색

How to Access Friend Functions Defined Within a Class?

클래스 내에 정의된 Friend 함수 액세스

Friend 함수를 사용할 때는 해당 함수가 정의되고 액세스되는 방식을 이해하는 것이 중요합니다. 친구 함수는 클래스의 멤버가 아니므로 클래스 외부에서 해당 함수에 액세스하려면 특별한 고려 사항이 필요할 수 있습니다.

제공된 코드 조각에서:

<code class="cpp">class A {

public:
    friend void fun(A a){std::cout << "Im here" << std::endl;}
    friend void fun2(){ std::cout << "Im here2" << std::endl; }
    friend void fun3();
};</code>

친구 함수 fun() 및 fun3( )은 클래스 내에서 정의되지만 전역 범위에서는 선언되지 않습니다. fun()은 A형 인수로 인해 ADL(Argument-Dependent Lookup)을 사용하여 직접 접근할 수 있지만, fun2()는 전역 범위에서 선언하지 않으면 접근할 수 없습니다.

fun2()에 올바르게 접근하려면 , 클래스 내에서 친구 함수로 정의되는 것 외에도 전역적으로 선언되어야 합니다.

<code class="cpp">class A {

public:
    friend void fun(A a){std::cout << "Im here" << std::endl;}
    friend void fun2();
    friend void fun3();
};

void fun2(){ std::cout << "Im here2" << std::endl; }</code>

이 수정된 버전에서는 fun2()를 클래스 외부에서 일반 함수로 액세스할 수 있습니다.

그러나 클래스 외부에서 일반적인 방식으로 친구 함수를 정의하는 것이 좋습니다.

<code class="cpp">class A {
   friend void fun(A a);
   friend void fun2();
   friend void fun3();
};

void fun(A a) { std::cout << "I'm here"  << std::endl; }
void fun2()   { std::cout << "I'm here2" << std::endl; }
void fun3();</code>

이 접근 방식을 사용하면 모든 친구 함수가 올바르게 정의 및 선언되어 액세스 가능하고 의도한 대로 사용할 수 있습니다.

위 내용은 클래스 내에 정의된 Friend 함수에 액세스하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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