C++ 友元函數(shù)
類(lèi)的友元函數(shù)是定義在類(lèi)外部,但有權(quán)訪問(wèn)類(lèi)的所有私有(private)成員和保護(hù)(protected)成員。盡管友元函數(shù)的原型有在類(lèi)的定義中出現(xiàn)過(guò),但是友元函數(shù)并不是成員函數(shù)。
友元可以是一個(gè)函數(shù),該函數(shù)被稱(chēng)為友元函數(shù);友元也可以是一個(gè)類(lèi),該類(lèi)被稱(chēng)為友元類(lèi),在這種情況下,整個(gè)類(lèi)及其所有成員都是友元。
如果要聲明函數(shù)為一個(gè)類(lèi)的友元,需要在類(lèi)定義中該函數(shù)原型前使用關(guān)鍵字 friend,如下所示:
class Box { double width; public: double length; friend void printWidth( Box box ); void setWidth( double wid ); };
聲明類(lèi) ClassTwo 的所有成員函數(shù)作為類(lèi) ClassOne 的友元,需要在類(lèi) ClassOne 的定義中放置如下聲明:
friend class ClassTwo;
請(qǐng)看下面的程序:
#include <iostream> using namespace std; class Box { double width; public: friend void printWidth( Box box ); void setWidth( double wid ); }; // 成員函數(shù)定義 void Box::setWidth( double wid ) { width = wid; } // 請(qǐng)注意:printWidth() 不是任何類(lèi)的成員函數(shù) void printWidth( Box box ) { /* 因?yàn)?printWidth() 是 Box 的友元,它可以直接訪問(wèn)該類(lèi)的任何成員 */ cout << "Width of box : " << box.width <<endl; } // 程序的主函數(shù) int main( ) { Box box; // 使用成員函數(shù)設(shè)置寬度 box.setWidth(10.0); // 使用友元函數(shù)輸出寬度 printWidth( box ); return 0; }
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:
Width of box : 10
更多建議: