友元函数是可以直接访问类的私有成员的非成员函数。 它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend。
优点
- 普通函数可以访问某个类中的私有或保护成员。提高了程序的效率
缺点: - 破坏了类的封装性和数据的透明性。
class Box
{
double width;
public:
double length;
friend void printWidth( Box box );
void setWidth( double wid );
};
printWidth的实现:
由于printWidth() 不是任何类的成员函数,所以实现的时候不需要加上作用域运算符,但是由于是友元函数,其可以访问该类的静态成员
void printWidth( Box box )
{
cout << "Width of box : " << box.width <<endl;
}
声明某个类的所有成员函数均为友元直接在类定义的时候加入
friend class ClassTwo;
友元函数的约束:
1.友元函数没有this指针,如果要访问对象的非静态成员,需要对象做参数
- 要访问static成员或全局变量时,不需要对象做参数;