定义:形如friend func1();使普通函数能够访问类的友元,实现位置可以在类外或类中,实现代码与普通函数相同,友元关系不能被继承,是单向,不具有交换性,
在实现类之间数据共享时减少系统开销,提高效率等
优点:能够提高效率,表达简单,清晰
缺点:友元破坏了封装机制,尽量不使用友元
声明:放在类的公有区和私有区都没有关系
使用:1. 运算符重载的某些场合需要使用友元 2. 两个类要共享数据的时候
实例:class INTEGER {
friend void A::Print(const INTEGER &obj); //声明这个类的友元函数,那么在其他地方调用这个函数就可以访问类的所有内容,声明时必须明确指出该成员函数属于哪个类
friend class A; //声明友元类
};
void Print(const InteGER &obj) {函数体}
void main() {
INTEGER obj;
Print(obj); // 调用友元函数
}
可以在一个头文件或源文件中定义多个类,然后将它们声明为各自的友元类,在源文件定义各自类中的函数时需要加域作用符
在声明为某个类的友元之前,其必须是程序中的一个已经定义过的类,不能新声明一个类,然后说它是谁谁谁的友元
public:void initialize();
friend void g(X*, int); // Global friend
friend void Y::f(X*); // Struct member friend
friend struct Z; //Entire struct is a friend
friend void h();
friend calss class-name