我认为朋友函数必须将类的对象作为其参数的朋友,但允许修改这些对象吗?
答案 0 :(得分:2)
根本不是强制性的。没有任何要求。唯一的区别是friend
函数可以访问类的私有成员。但它可能完全不相关。
class A {
int x;
friend void foo();
};
void foo() {
std::cout << "Hello, World!\n";
}
foo
没有任何参数,甚至没有以任何方式引用A
,但它仍然是friend
并且完全被允许。毫无意义,但完全合法。
我们可以让它做这样的事情:
void foo() {
A a;
a.x = 42;
}
答案 1 :(得分:0)
友谊授予访问班级所有私人成员的权限。
包括修改非const对象的任何或所有(受保护,私有,公共)成员的能力,修改const对象的任何或所有可变成员的能力。它还包括读取任何或所有成员的价值的能力。
这假设成员本身也允许操作。