> 백엔드 개발 > C++ > 클래스 내에 정의된 인수 없이 친구 함수에 어떻게 액세스합니까?

클래스 내에 정의된 인수 없이 친구 함수에 어떻게 액세스합니까?

Susan Sarandon
풀어 주다: 2024-11-05 15:41:02
원래의
1011명이 탐색했습니다.

How do you access a friend function without arguments defined inside a class?

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

C에서는 클래스 내에서 friend 함수를 정의하는 것이 가능합니다. Friend 함수는 클래스의 private 및 protected 멤버에 액세스할 수 있는 외부 함수입니다. 일반적으로 친구 함수는 외부 모듈이나 함수가 클래스 멤버와 상호 작용할 수 있도록 하는 데 사용됩니다.

문제:

다음 코드를 고려하세요.

<code class="cpp">class A {
public:
    friend void fun(A a);  // Friend function that takes an argument of type A
    friend void fun2();  // Friend function without arguments
    friend void fun3();  // Friend function declaration
};

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

int main() {
    fun(A()); // Works OK
    // fun2(); // Error: 'fun2' was not declared in this scope
    // A::fun2(); // Error: 'fun2' is not a member of 'A'
    fun3(); // Works OK
}</code>
로그인 후 복사

질문:

친구 기능 fun2()에 어떻게 액세스할 수 있나요?

답변:

에 액세스하려면 친구 함수 fun2()를 사용하려면 클래스 외부에서 명시적으로 정의해야 합니다. 현재 fun2()의 정의가 누락되어 컴파일러가 전역 범위에서 이를 찾을 수 없습니다.

문제를 해결하려면 fun2()를 클래스 외부의 전역 함수로 정의하세요.

<code class="cpp">void fun2() { std::cout << "Im here2" << std::endl; }</code>
로그인 후 복사

이번 변경으로 오류 없이 fun2()에 액세스할 수 있습니다.

<code class="cpp">fun2(); // Works OK</code>
로그인 후 복사

또한 친구 함수를 별도의 엔터티로 정의하는 일반적인 패턴을 따르는 것이 좋습니다. 명확성과 유지 관리성을 위해 클래스 외부:

<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(); // Leave it as a declaration

int main() {
    fun(A());
    fun2();
    fun3();
}</code>
로그인 후 복사

위 내용은 클래스 내에 정의된 인수 없이 친구 함수에 어떻게 액세스합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿