友元的作用是提高了程序的运行效率(即减少了类型和安全性检查及调用的时间开
销),但它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。
友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为
友元类。
友元函数终究不是成员函数,成员中有隐参 this 指针,可以直接访问成员,而友元
中则没有,必须得通过对象来访问。
友元函数语法格式:
class A
{
friend void globalfunction(A &,...)public:
....
}
一个类的成员函数作友员,在声明为另一个类的友员时,要将原类的作用域加上,
语法格式如下:
class A
{
friend
void One::globalfunction(A&,...);public:
...
}
友元类:
class A
{
friend class B;
public:
private:
...
};
友元关系不能被继承。
友元关系是单向的,不具有交换性。若类 B 是类 A 的友元,类 A 不一定是类 B
的友元,要看在类中是否有相应的声明。
友元关系不具有传递性。若类 B 是类 A 的友元,类 C 是 B 的友元,类 C 不一定
是类 A 的友元,同样要看类中是否有相应的声明。