在 C++ 中,我们可以通过使用 friend
关键字来将一个函数或类声明为另一个类的友元,从而获得访问该类中私有成员的权限。
友元函数:
在一个类中,如果某个函数被声明为该类的友元函数,就能够访问该类中所有的成员(包括私有成员)。下面是一个简单的例子:
class A {
private:
int a_;
friend void foo(A& obj);
};
void foo(A& obj) {
obj.a_ = 10; // 可以访问 A 类的私有成员变量
}
在上述示例中,我们定义了一个类 A
,其中包含一个私有成员变量 a_
,并将全局函数 foo
声明为 A
类的友元函数。函数 foo
可以直接访问 A
类对象的私有成员变量 a_
。
友元类:
在一个类中,如果另一个类被声明为其友元,则该类中的所有成员函数都可以访问该友元类中的所有成员(包括私有成员)。下面是一个简单的例子:
class B;
class A {
private:
int a_;
friend class B;
};
class B {
public:
void foo(A& obj) {
obj.a_ = 10; // 可以访问 A 类的私有成员变量
}
};
在上述示例中,我们定义了两个类 A
和 B
,其中 A
中包含一个私有成员变量 a_
,并将 B
声明为 A
类的友元类。类 B
中的成员函数 foo
可以直接访问 A
类中的私有成员变量 a_
。
需要注意的是,友元关系是单向的,即如果类 A
是类 B
的友元,则不一定意味着类 B
也是类 A
的友元。此外,友元关系破坏了封装性,应该慎用。只有当必须进行跨类访问时,才应该使用友元函数或友元类。