友元函数:
友元函数是一种
1.定义在类外,
2.但是可以访问类域中的私有和保护成员。
即便友元函数的原型出现在类定义中,友元函数并不是成员函数,这一点尤其需要注意。
友元可以是函数、函数模版、成员函数;或者所有成员都是友元的类或类模版。
所以不要局限对友元的理解。
声明一个类的友元函数,只需要加上友元关键字即可:
class Box { double width; public: double length; friend void printWidth( Box box ); void setWidth( double wid ); };
声明一个类的友元类,同样的操作:
class Rectangle { public: Rectangle() { L=10; B=20; } private: int L,B; friend class Square; };
同样是可以获取到private和protected成员的。
一个完整的:
#include <iostream> using namespace std; class Box { double width; public: friend void printWidth( Box box ); void setWidth( double wid ); }; // 成员函数定义 void Box::setWidth( double wid ) { width = wid; } // 注意:printWidth()不是类的成员函数 void printWidth( Box box ) { /* 因为是友元,所以可以获取到private */ cout << "Width of box : " << box.width <<endl; } int main() { Box box; box.setWidth(10.0); printWidth( box ); return 0; }