友元函数
通常,类的 private 成员不能从该类以外的地方访问。
但是,声明一个非成员函数作为类的朋友允许它访问类的私有成员。这是通过在类中包含这个外部函数的声明来实现的,并且在关键字 friend 之前。在下面的例子中,someFunc() 不是类的成员函数,它是 MyClass 的一个好友,可以访问它的私有成员。
class MyClass {
public:
MyClass() {
regVar = 0;
}
private:
int regVar;
friend void someFunc(MyClass &obj);
};
请注意,在将对象传递给函数时,我们需要使用&运算符通过引用来传递它。

friend
函数 someFunc() 被定义为类之外的常规函数. 它将 MyClass 类型的对象作为参数,并能够访问该对象的私有数据成员。
class MyClass {
public:
MyClass() {
regVar = 0;
}
private:
int regVar;
friend void someFunc(MyClass &obj);
};
void someFunc(MyClass &obj) {
obj.regVar = 42;
cout << obj.regVar;
}
someFunc() 函数更改对象的私有成员并打印其值。
为了使其成员可访问,类必须在其定义中声明该函数为朋友。
你能把一个函数做为一个类的朋友,除非类“放弃”它对那个函数的友谊。

class Myclass{
public:
friend void foo();
};
现在我们可以在 main 中创建一个对象,并调用 someFunc() 函数:
int main() {
MyClass obj;
someFunc(obj);
}
//输出 42
someFunc() 有权限修改对象的私有成员并打印它的值。
友元函数的典型用例是在访问两者的私有成员的两个不同类之间进行的操作。
你可以在任何数量的类中声明一个函数的朋友。
与友元函数类似,您可以定义一个朋友类,该类可以访问另一个类的私有成员。

文章评论