类a的私有成员函数是否可以声明为类B的友元

Can a private member function of class A be declared as a friend of class B?

本文关键字:声明 友元 函数 成员 是否      更新时间:2023-10-16

Lippman的Essential C++第4.7节做到了这一点。但我不知道为什么这个代码不能编译:

#include <iostream>
using namespace std;
class A
{   
void f();
//other members...
};
class B
{
//other members...
friend void A::f();
};
int main()
{
return 0;
}

在a类编译中,将"public:"放在void f()之前。那么李普曼错了?

李普曼的代码是这样的:

//...
class Triangular_iterator
{
//...
private:
void check_integrity() const;
//...
};
//...
class Triangular
{
//...
friend void Triangular_iterator::check_integrity();
//...
};
//...

不能将函数或"class A"的成员声明为"class B"中"class B"的朋友
您必须允许"类B"成为"类a"的朋友,然后使A::f()成为"类B的朋友:

class A
{   
void f();
friend class B; //allow B access to private (protected) members and functions
};
class B
{
friend void A::f();
};

在现实生活中,你也不能违背别人的意愿决定成为他们的朋友!

有关示例,请参见此处。

类A的私有成员函数可以声明为类B的朋友。为了实现这一点,类B必须声明为类A的朋友(否则,类B无法看到类A的私人成员函数):

class A
{
    friend class B;
    void f();
};
class B
{
    friend void A::f();
};

在C++中,朋友的概念来源于这样一个事实,即我允许那些我声明为朋友的人与非朋友区别对待我。这并不涉及将我宣布为朋友的人与非朋友的人区别对待。