在介绍类和对象时,已经说过类具有封装性,类中的私有成员一般只有通过该类中的成员函数才可以访问,而程序中的其他函数时无法直接访问类中的私有成员的。如果在一定的条件下需要访问类的私有成员,就必须通过对象来调用类的成员函数,但是频繁的调用会非常的繁琐,也会降低程序的运行效率。为了解决这个问题,有了友元函数这个帮手,但是引进它,也破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员,一般不建议使用友元函数。
友元函数
友元函数的特点:
1,说明在类体内,说明时,在函数的类型说明符前加关键字friend。
2,定义在类体外时,定义格式和一般的普通函数相同,为:<类型说明符> <函数名> ( <参数表> )
3,友元函数时非成员函数,在调用上与普通函数相同。
4,友元函数可以直接访问类中的私有成员。
举例编程求两个double型数的点之间的距离:
#include
//头文件命令 #include
//数学库函数包含文件 class Point { public: Point(double i,double j)//定义的带两个参数的构造函数 { x=i; y=j; } void Getxy()//一般的成员函数 { cout<<"("<
程序的分析:
1,通过调用构造函数来对类的对象进行初始化,使得两个对象的参数得到数值。
2,通过对象调用成员函数来输出坐标。
3,通过调用友元函数来输出两个点之间的距离。

友元类
友元类是把一个类当成另一个类的友元。当一个类作为另一个类的友元时,友元类中的所有成员函数都是另一个类的友元函数。
友元函数定义格式:friend class <类名>
举例编程实现友元类的使用
#include
//头文件包含命令
class A//定义的类A
{
public:
friend class B;//定义的友元类B
void Set(int i) { x=i; }//一般的成员函数
void Display()
{
cout<<"x="<
程序分析:
1,通过调用成员函数来赋值给x,静态数据成员的值为10,因此输出x=5,y=10
2,通过调用构造函数来给类B的对象的成员进行赋值,然后再调用成员函数来输出x=6,y=9
3,在进行第二次的输出时,静态数据成员被更新成9,因此输出x=5,y=9
漏洞。