gpt4 book ai didi

c++ - A类的私有(private)成员函数可以声明为B类的友元吗?

转载 作者:太空狗 更新时间:2023-10-29 23:45:32 25 4
gpt4 key购买 nike

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 类编译中的 void f() 之前放置一个“public:”。那么李普曼错了吗?

附注李普曼的代码是这样的:

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

//...

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

//...

最佳答案

您不能将“A 类”的函数或成员声明为“B 类”中“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();
};

在现实生活中,你也不能违背某人的意愿决定成为他的 friend !

参见 here举个例子。

关于c++ - A类的私有(private)成员函数可以声明为B类的友元吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18102515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com