友元存在的优缺点:友元的存在,破坏了类封装的属性,使得类的私有成员、保护成员能被其他友元类、友元函数访问。但是,也有它的好处就是,实现了数据、函数的共享,提高了系统的访问效率,减少了不必要的系统开销。
友元函数:
类的友元函数是定义在类的外部,但有权访问类的所有私有(private)成员,所有保护(protected)成员。
注意:类的友元函数原型是在类的内部定义,但是友元函数不是类的成员函数。(友元函数不是类的成员函数)
友元分为友元函数、友元类。如果是友元类,那么所有的成员都是友元。
声明函数为一个类的友元,需要在函数原型前使用关键字friend,如下所示:
class Box { double width; public: double length; friend void printWidth( Box box ); void setWidth( double wid ); };
声明类 ClassTwo 的所有成员函数作为类 ClassOne 的友元,需要在类 ClassOne 的定义中放置如下声明:
friend class ClassTwo;