类能够将数据和处理数据的函数封装在一起,从而实现数据的共享与隐藏。但有时候我们需要让其他类或者函数访问到类中隐藏的数据或者函数,友元就能够帮助我们完成这一需求。友元提供了一种在不同类的成员函数与一般函数之间数据共享方式。
友元函数
友元函数是在类中用关键字friend修饰的函数,可以访问该类中的私有成员和保护成员。
友元类
友元类是在类中用关键字friend修饰的类,可以访问该类中的私有成员和保护成员,且类中的所有函数都为另一个类的友元函数。
#include <iostream>
using namespace std;
class A
{
public:
void display() { cout << x << endl; }
friend class B;//类友元
friend void set(A &a, int i);//函数友元
private:
int x;
};
class B
{
public:
void set(int i);
void display();
private:
A a;
};
void B::set(int i)
{
a.x = i;
}
void B::display()
{
a.display();
}
void set(A &a, int i)
{
a.x = i;
}
int main()
{
B b;
b.set(4);
b.display();
A a;
set(a, 4);
a.display();
return 0;
}
注意点
- 友元关系不能传递;
- 友元关系是单向的;
- 友元关系不能继承;