一般来说,类外的函数只能访问类内的public权限的数据或者函数;对于要访问protected权限或者private权限的数据或者函数,就可以借助friend关键字。而带有friend的函数就是友元函数。

友元函数一般格式:

friend 返回值类型 函数名(参数列表)

注意:友元函数访问数据成员并不是通过直接访问数据成员进行的,而是通过对象进行调用!

友元函数和友元类_类名

这个友元函数声明一般放在类的最前面,其它位置也是可以的。

友元类:

一般格式:

friend class 类名

和友元函数差不多,就是一个类访问另一个类的protected和private权限的成员。

class Stu
{
friend class Stu2;
public:
int data;
void disp();
protected:
int score;
};
class Stu2
{
public:
Stu2(int data,int score);
int data;
int score;
void disp()
{
q.disp();
}
private:
Stu q;
};
Stu2::Stu2(int data, int score)
{
q.data = data;
q.score = score;
}
void Stu:: disp()
{
cout << "data=" << data << "--" << "score=" << score << endl;
}
int main()
{
Stu2 p(10,20);
p.disp();
return 0;
}

注意:

1.友元关系必须经过指定,比如例子中的Stu2是Stu的友元函数。

2.友元关系是单向的,不具有交换性。

3.友元关系不具有传递性。


如有不对,欢迎指正。