C 學習筆記(八) 友元

2021-09-10 21:33:02 字數 1921 閱讀 1919

友元實現的是在類外訪問類的私有成員。其關鍵字為friend。使用時可包括有以下幾個操作:

0、宣告該友元;

1、宣告該類;

2、在類中宣告該友元並實現該類;

3、實現該友元。

依據友元的不同實現可以將友元分為以下三類:

普通友元函式需要注意的是其形參必須要有該類的物件,另外,該函式的宣告與定義都要放在類的下面。例項**如下(**8-1):

///

/// @file friend1.cc

/// @date 2019-02-14 09:20:51

///#include using std::cout;

using std::endl;

//友元普通函式

class a

void print()

friend int getxy(a & it);//操作2: 在類中宣告該友元並實現該類

private:

int _ix;

int _iy;

};int getxy(a & it)//操作3: 實現該友元函式

int main()

例項**(**8-2):

///

/// @file friend2.cc

/// @date 2019-02-14 09:37:25

///#include using std::cout;

using std::endl;

//友元之成員函式

class a;//前向宣告,步驟1:宣告該類

class b;

class a

private:

friend int b::sumxy(a & opt);//步驟2:在類中宣告該友元並實現該類

int _ix;

int _iy;

};int b::sumxy(a & opt)//步驟3:實現該友元函式

int main()

這裡需要注意的是在有友元函式的類(b類)中只能定義該友元函式,實現該友元函式要放到a類的後面。

例項**(**8-3):

///

/// @file friend3.cc

/// @date 2019-02-14 10:04:10

///#include using std::cout;

using std::endl;

class b; //操作0:宣告該友元

class a //2、在類中宣告該友元並實現該類

friend class b;//宣告該友元類

private:

int _ix;

int _iy;

};class b //3、實現該友元類

int sumxy(a a)

};int main()

友元的實現有乙個明顯的特點就是:宣告與實現分開,且實現都放在了(a作為b類的友元)b類的後面。不可否認,友元在一定程度上將類的私有成員暴露出來,破壞了資訊隱藏機制,似乎是種「***很大的藥」,但俗話說「良藥苦口」,好工具總是要付出點代價的,拿把鋒利的刀砍瓜切菜,總是要注意不要割到手指的。友元的存在,使得類的介面擴充套件更為靈活,使用友元進行運算子過載從概念上也更容易理解一些,而且,c++規則已經極力地將友元的使用限制在了一定範圍內,它是單向的、不具備傳遞性、不能被繼承,所以,應盡力合理使用友元。單向指a作為b類的友元,a可以訪問b的private區的成員,但是b不可以訪問a的private區。不具有傳遞性指,a作為b類的友元,b作為c類的友元,a不可以訪問c類的private區。不能繼承指a類作為b類的友元類,c類繼承了a類,c不能訪問b的private區。

C 學習筆記(八) 友元函式

1.友元函式的定義 定義在類的外部,但是有權訪問所有private以及protected函式,友元函式並不是成員函式。友元可以是乙個函式或者乙個類。在友元類下,整個類的所有成員都為友元。關鍵字 friend ex class box 請注意 printwidth 不是任何類的成員函式 void pr...

C 友元學習筆記

友元可以分為三種 1.友元函式 2.友元類 3.友元成員函式 友元的好處,通過友元函式,可以賦予函式與類成員函式相同的訪問許可權,友元函式是可以訪問類私有成員的非類成員函式。因為友元函式不是類的成員函式,所以不能用類物件呼叫成員函式的方式 類成員符 調用友元函式。友元函式的建立 templatecl...

友元 c 學習筆記

size medium 1.含義 友元關係以 color blue friend color 關鍵字宣告,包括友元函式和友元類。2.作用 訪問與其有好友關係的類中的私有成員。3.友元函式可以是一般函式 非成員函式 也可以是另乙個類中的成員函式。4.友元 利弊 1 利 有助於資料共享,可以提公升程式的...