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 );
};
// 成員函數定義
void Box::setWidth( double wid )
{
width = wid;
}
// 請注意:printWidth() 不是任何類的成員函數
void printWidth( Box box )
{
/* 因為 printWidth() 是 Box 的友元,它可以直接訪問該類的任何成員 */
cout << "Width of box : " << box.width <<endl;
}
// 程式的主函數
int main( )
{
Box box;
// 使用成員函數設置寬度
box.setWidth(10.0);
// 使用友元函數輸出寬度
printWidth( box );
return 0;
}
當上面的代碼被編譯和執行時,它會產生下列結果:
Width of box : 10