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

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

Susan Sarandon
Susan Sarandon원래의
2024-11-10 08:39:02468검색

How to Access Friend Functions Defined in a C   Class?

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

C에서 friend 함수에는 클래스의 private 및 protected 멤버에 대한 액세스 권한이 부여됩니다. 제공된 코드는 세 가지 친구 함수인 fun, fun2fun3을 사용하여 A 클래스를 정의합니다. funfun3에는 문제 없이 액세스할 수 있지만 fun2에 액세스하는 데 문제가 있습니다.

fun2에 액세스하려면, 두 가지 옵션이 있습니다:

1. Friend 함수의 전역 선언:

클래스 정의 후에 전역 범위에서 friend 함수를 선언할 수 있습니다. 이는 함수가 외부에 존재하며 클래스의 친구임을 컴파일러에 알립니다. 예:

<code class="cpp">#include <iostream>

class A {
public:
    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() {
    std::cout << "I'm here3" << std::endl;
}

int main() {
    fun(A()); // Works
    fun2(); // Now works
    fun3(); // Works
}</code>

2. 명시적 멤버 함수 호출:

친구 함수를 클래스의 멤버 함수로 명시적으로 호출할 수 있습니다. 그러나 이를 위해서는 친구 함수가 정적으로 표시되어야 합니다(this 매개변수가 없는 경우). 예를 들면 다음과 같습니다.

<code class="cpp">#include <iostream>

class A {
public:
    friend static void fun(A a);
    friend static void fun2();
    friend static void fun3();
};

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

int main() {
    fun(A()); // Works
    A::fun2(); // Works
    fun3(); // Works
}</code>

명시적으로 액세스하든 정적 멤버 함수로 액세스하든 상관없이 전역 범위에서 friend 함수를 선언해야 한다는 점을 기억하세요.

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

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