友元是为了兼顾C语言的习惯和c++信息隐藏的特点而特意增加的功能。
友元机制是对一些类外的函数打开的一个特殊通道,授权他们能访问本类的私有成员变量。
友元的概念打破了类的封装性和信息隐藏,但有助于数据共享,能够提高程序执行的效率。
二、友元机制包括友元函数和友元类。
友元函数:定义类时可以把一些函数包括全局函数和其他类的成员函数声明为“友元”函数。
在类定义中声明友元函数形式:
friend 函数类型 函数名(参数列表); // 针对全局函数
friend 函数类型 函数所在类名::函数名(参数列表);
友元函数可在类中的私有或公有部分通过关键词 friend 声明或定义,如在类中声明,而在类外定义,就不能在类外使用friend关键字。
三、友元类
如果将类B说名称类A的友元类,则类B中的所有函数都是类A的友元函数。
类定义声明友元类的格式如下:
friend class 类名;
友元类的关系是单向的。若说明类B是类A的友元类这并不代表类A也是类B的友元类。友元类的关系不能传递,即类B是类A的友元类,而类C是类B的友元类,不等于类C是类A的友元类。
除非必要,一般不把整个类都说明为友元类,而仅把类中的某些成员函数说明为友元函数。