C++ 友元函數(shù)

c++ 友元函數(shù)

c++ 類(lèi)和對(duì)象c++ 類(lèi)和對(duì)象

類(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

c++ 類(lèi)和對(duì)象c++ 類(lèi)和對(duì)象

下一節(jié):c++ 內(nèi)聯(lián)函數(shù)

c++ 簡(jiǎn)介

相關(guān)文章
C++基礎(chǔ)
亚洲国产精品第一区二区,久久免费视频77,99V久久综合狠狠综合久久,国产免费久久九九免费视频