클래스에 정의된 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!