类的友元函数的定义类之外的范围,但它来访问类的所有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;
考虑下面的程序:
#include <iostream> using namespace std; class Box { double width; public: friend void printWidth( Box box ); void setWidth( double wid ); }; // Member function definition void Box::setWidth( double wid ) { width = wid; } // Note: printWidth() is not a member function of any class. void printWidth( Box box ) { /* Because printWidth() is a friend of Box, it can directly access any member of this class */ cout << "Width of box : " << box.width <<endl; } // Main function for the program int main( ) { Box box; // set box width without member function box.setWidth(10.0); // Use friend function to print the wdith. printWidth( box ); return 0; }
让我们编译和运行上面的程序,这将产生以下结果:
Width of box : 10