位置:首頁 > 高級語言 > C++教學 > C++友元函數

C++友元函數

類的友元函數的定義類之外的範圍,但它來訪問類的所有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