友元friend 机制允许一个类授权其他的函数访问它的非公有成员。友元声明以关键字friend 开头,它只能出现在类的声明中。由于友元不是授权友谊的类的成员,所以它们不受其在类体中被声明的public private 和protected 区的影响,这里我们选择把所有友元声明组织起来放在类头之后。
1 class Screen {2 friend istream&3 operator>>( istream&, Screen& );4 friend ostream&5 operator<< ( ostream&, const Screen& );6 public:7 // ... Screen 类的其他部分8 };
一个友元可以是一个普通函数,一个前面定义的类的成员函数也可以是一个完整的类。在使一个类成为友元时友元类的所有成员函数都被给予访问授权友谊的类的非公有成员的权力
友元函数:(普通函数)
class Window { friend bool is_equal( Screen &, Window & ); // ...};bool is_equal(Screen &, Window &) { //函数中可以直接使用Window中的非公有成员 //... }
(成员函数)
class Window;class Screen { public: // copy 是类 Screen 的成员 Screen& copy( Window & ); // ...};class Window { // copy 是类 Window 的一个友元 friend Screen& Screen::copy( Window & ); // ...};
友元类:(Screen类是Window类的友元类,Screen可以访问Window中的非公有成员)
class Screen;class Window { friend class Screen;};