允许访问类的私有成员,通常是一些运算符重载函数,使用friend修饰的函数。
把一个类声明修饰为友元类,可以访问类的私有成员属性。
1,普通友元函数
使用friend修饰的函数,它可以允许其他类或者函数访问它的非公有成员。
//声明
friend int getUserAge(Student & student);
//定义
int getUserAge(Student& student)
{
return student.age;
}
友元函数只能出现在类定义的内部,具体位置不限。
友元不是类的成员不受它所在区域访问控制级别的约束。
2,类友元
如果一个类指定了友元类,则友元类的成员函数可以访问此类包括的非公有成员在内的所有成员
例如:
class Parent{
public:
void eat();
void sleep();
private :
int height;
int width;
}
class Child{
friend class Parent;
public:
void sleepWalking();
private:
int sleepTime;
int eatTime;
}
Parent被指定为Child的友元,因此在parent内修改child的所有成员属性。
3,友元成员函数
除了类友元以外,还可以为类的单独一个成员函数添加友元,这样仅该友元函数才可以访问所在类的成员
例如:
class Child{
friend void Parent::sleep();
public:
void sleepWalking();
private:
int sleepTime;
int eatTime;
}
注:要想令某个成员函数作为友元,必须仔细的组织程序的结构以满足声明喝定义的彼此的依赖关系。