类a的私有成员函数是否可以声明为类B的友元
Can a private member function of class A be declared as a friend of class B?
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++中,朋友的概念来源于这样一个事实,即我允许那些我声明为朋友的人与非朋友区别对待我。这并不涉及将我宣布为朋友的人与非朋友的人区别对待。
相关文章:
- 如何在嵌套类中正确使用友元声明?
- 将子类方法声明为基类的友元
- 在将函数声明为友元时,尖括号的含义是什么?
- 使用typedef'ed返回类型声明友元函数时出现编译器错误
- C++ 17 个友元函数声明和内联命名空间
- 将派生类的构造函数声明为父类的友元
- 为什么 gcc 无法从其前向声明中检测到友元类命名空间?
- 类模板中文本运算符的友元声明
- 以嵌套类为参数的友元模板声明
- 模板和隐式构造函数的类定义之外的友元声明
- 如何将友元声明用于具有约束的模板类
- 为什么我不能定义一元运算符,然后在 MSVC 的模板类中声明具有相同名称的友元二进制运算符?
- 为什么在定义类之前声明类的对象会在友元类中给出错误,而在友元函数中不会出错
- 如何将模板友元函数声明为可变参数类
- 嵌套友元类所需的前向声明
- 在派生类或基类中,我应该在哪里声明友元类
- 类定义交叉引用时如何声明友元方法
- 在此范围内未声明友元函数错误
- GCC声明友元函数是重载的,有歧义调用,clang编译
- 声明友元函数时出现变量作用域错误