0.前言
friend友元,顾名思义是好朋友的意思,即我是你的好朋友,你所私有的东西会跟我分享,为我所用;通常分为友元函数和友元类。
1.友元函数
1)友元函数能够访问类中的私有变量;
2)友元函数可以定义在类中的任何位置,public、protected、private中均可;
3)友元函数为全局函数,在实现中无需加上类标识;
4)函数参数为类的对象,以便对类成员进行操作;
5)常用于对运算符或系统函数的重载。
说明:若要定义某个函数能够实现对某类变量操作,不管该函数是系统函数还是其他函数,均可通过在某类中使用friend关键字 定义友元函数,通过该友元函数可以实现对某类的操作,在友元函数的参数为类对象。
例子:
class AB
{
public:
AB()
{
this->a=888;
this->b=666;
}
AB(int a,int b)
{
this->a=a;
this->b=b;
}
friend void modifya(AB &ab);
//void modifyb(AB &ab);
void Print()
{
cout<<a<<b<<endl;
}
private:
int a ;
int b ;
};
void modifya(AB &ab)
{
ab.a=88;
}
void main()
{
AB aaa;
modifya(aaa);
aaa.modifyb(aaa);
aaa.Print();
system("pause");
return;
}
2.友元类
1)若B类是A类的友员类,则B类的所有成员函数都是A类的友员函数;
2)友员类通常设计为一种对数据操作或类之间传递消息的辅助类;
3)友元类中需要定义类对象,如B类是A类的友员类,则B中要定义一个A的对象,以便对A进行操作。
例子:
class A
{
public:
friend class B;//B类 是 A的好朋友 ,在B中可以访问A类的私有成员 私有函数
//1 声明的位置 和 public private没有关系
friend void modifyA(A *pA, int _a); //2 函数modifyA 是 类A的好朋友
A(int a=0, int b=0)
{
this->a = a;
this->b = b;
}
int getA()
{
return this->a;
}
private:
int a;
int b;
};
//
void modifyA(A *pA, int _a)
{
//pA->a = 100;
pA->a = _a;
}
//
class B
{
public:
void Set(int a)
{
Aobject.a = a;
}
void printB()
{
cout<<Aobject.a <<endl;
}
private:
A Aobject;
};
void main()
{
B b1;
b1.Set(300);
b1.printB();
system("pause");
}