友元是C++中的一个特殊功能,它允许其他类或者函数访问其本来的非公有成员,包括private和protected成员。
一、友元类
将其他类声明为友元类,该类可以访问本类的非公有成员:
class MyClass {
friend class FriendClass;
private:
int x;
};
class FriendClass {
public:
void func(MyClass& c) {
c.x = 1; // 允许访问private成员
}
};
二、友元函数
非成员函数也可以被声明为友元:
class MyClass {
friend void func(MyClass&);
private:
int x;
};
void func(MyClass& c) {
c.x = 1; // 允许访问private
}
三、成员函数作为友元
成员函数可以被设置为其他类的友元:
class A {
friend void B::func(A&);
};
class B {
public:
void func(A& a) {
a.x = 1;
}
};
四、限制过多使用
但是需要注意过多使用友元可能会破坏封装性。
五、优点与缺点
友元提高了软件可靠性,但是降低了对象的独立性。
友元是C++访问权限控制中的一项高级功能,提高了类之间的配合程度,但是也降低了灵活性,应该谨慎使用。