C++为解决效率的需要,提出了一个友元的概念。
只要把某个类外函数声明为该类的友元,就可以直接访问类中的任何成员(public,protect,private)
也就相当于说,开放了一个后门,既然是开后门,那么自然是在该类里面说明。
所以,所有的友元声明都应该在该类中。
1)将普通函数声明为类的友元,
如:class A
{
private:
int id;
friend void display(A &a); // 开了一个后门给 display
};
void display(A &a)
{
cout<
};
2)将某个类声明为本类的友元类
如:class A
{
private:
int id;
friend class B;
};
class B
{
public:
static void showA(A &a)
{
cout<
};
3)将某个类的成员函数声明为本类的友元函数, 开放权限给某个成员函数
参考代码如下:
#include
using namespace std;
class A; // 因为在类A的定义之前,类B用到了A,所以要先在这里做引用性声明
class B
{
public:
void showA(A &a);
};
class A
{
private:
int id;
public:
A(int id):id(id){};
// 注意:开放给其他类,那么其他类必须在此前已经有完整定义了!
friend void B::showA(A &a); // 要通过‘::’运算符表示开放权限给哪个类的成员函数
};
// 友元的成员函数,必须定义在该类的后面,不然找不到A的定义
void B::showA(A &a)
{
cout<
int main()
{
A a(1);
B b;
b.showA(a);
return 0;
}
1)友元都声明在类中,只是说明友元函数,友元类有权访问类的所有成员,但并不表明友元函数和友元类属于该类的成员。
2) 友元声明不受权限的限制,声明在哪一行都行。
3)用friend 修饰,一般使用对象的别名作为参数