友元 friend
我们知道私有成员只能自己可以访问,这样一刀切很不灵活。
因此,友元机制 是对 类的封装性的一个补充。
一个类允许与它有 友元 关系的 函数 或类 直接访问其私有或保护信息。
友元分两种:
(1)友元函数
如果一个函数想直接访问一个类的私有/保护成员,那么这个类只需要向编译器做友元
声明即可:
friend 函数返回类型 函数名(参数列表);
注意: 友元函数必须在类里声明,在类外实现!
(2)友元类
如果一个类A中所有的成员函数都想去访问一个类B的隐藏信息,那么只需要在类B做一个
友元类的声明即可。
friend class 类名;
注: 友元关系是单向的:如果类A是类B的朋友,但不代表类B是类A的朋友。
友元关系是不可传递的:如果类A是类B的朋友,类B是类C的朋友,但不代表类A和类C是朋友。
eg.
class A
{
int familyNUM;
public:
A(int x)
{
familyNUM=x;
}
friend void check(A &a); //友元函数声明
};
void check(A &a)
{
cout << a.familyNUM <<endl;
}
int main()
{
A a(1);
check(a); //输出 1
}