首页  >  文章  >  后端开发  >  如何在类中没有定义参数的情况下访问友元函数?

如何在类中没有定义参数的情况下访问友元函数?

Susan Sarandon
Susan Sarandon原创
2024-11-05 15:41:02960浏览

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

访问类中定义的友元函数

在 C 中,可以在类中定义友元函数。友元函数是可以访问类的私有成员和受保护成员的外部函数。通常,友元函数用于使外部模块或函数能够与类成员交互。

问题:

考虑以下代码:

<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中文网其他相关文章!

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