首页 >后端开发 >C++ >如何访问 C 类中定义的友元函数?

如何访问 C 类中定义的友元函数?

Susan Sarandon
Susan Sarandon原创
2024-11-10 08:39:02543浏览

How to Access Friend Functions Defined in a C   Class?

访问类中定义的友元函数

在 C 中,友元函数被授予访问类的私有和受保护成员的权限。提供的代码定义了一个具有三个友元函数的类 Afunfun2fun3。虽然 funfun3 可以毫无问题地访问,但访问 fun2 时出现问题。

要访问 fun2,您有两个选择:

1。友元函数的全局声明:

您可以在类定义之后在全局范围内声明友元函数。这通知编译器一个函数存在于外部并且是该类的友元。例如:

<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>

记住,全局范围内的友元函数的声明是必要的,无论它是显式访问还是作为静态成员函数。

以上是如何访问 C 类中定义的友元函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn