C++ friend 函数

  • friend 函数

    friend 函数是在该类的范围之外定义的,但它有权访问该类的所有私有成员和受保护成员。即使friend 函数的原型出现在类定义中,friend 函数也不是成员函数。friend 可以是函数,函数模板或成员函数,也可以是类或类模板,在这种情况下,整个类及其所有成员都是friend 函数。要将函数声明为friend 函数,请在类定义中的函数原型之前添加关键字friend,如下所示:
    
    class Box {
       double width;
       
       public:
          double length;
          friend void printWidth( Box box );
          void setWidth( double wid );
    };
    
    要将类ClassTwo的所有成员函数声明为类ClassOne的friend,请在类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