27 友元的尷尬能力

2021-09-26 09:19:07 字數 1570 閱讀 6967

1、友元的概念

2、友元的用法

3、友元的語法

class test

;void func(test& t)

在這個程式中,函式 func 是test 類的友元,因此,函式就可以直接訪問類中的所有成員

分析:我們定義乙個 func 函式來計算兩個物件座標的距離。如果我們不把 func 函式定義為test 類的友元,那麼計算函式裡面我們只能借助物件引數來呼叫 getx()和gety()函式。如果是這樣,那麼一共要呼叫8次函式(詳見程式的27 和28 行**),極其麻煩。

如果我們把 func 函式定義為test 類的友元,那麼引數物件就可以直接訪問類裡面的所有成員,包括私有成員。(詳見程式的 30 和 31 行**),這樣就避免了一直要訪問函式

4、友元的尷尬

5、注意事項

#include class classc

friend class classb;

};class classb

void getclasscname(classc& c)

friend class classa;

};class classa

//a是b的友元,所以在b的類中宣告,a可以任意訪問b中的所有成員

分析:其實這個程式我還是折騰了挺久的,因為它老是報錯。

首先**於我對知識點認知的錯誤,一開始我以為友元可以直接訪問具體類的所有成員,所以我就在主函式定義用類a定義物件來訪問另乙個類b(a是b的友元)裡面的私有成員,發現一直報錯。後來才發現:宣告為友元,只是允許在a的作用域裡隨意訪問,主函式不是a的作用域。也就是說我們可以在a類裡面成員函式的引數裡面定義b的物件,在這個函式裡面訪問類b。

其次,這個類的先後順序還是很重要的,如果你定義類a是類b的友元,類a可以隨意訪問類b裡面的所有成員,那麼你要先定義class b,再定義class a。

最後:a是b的友元,a是成員函式或者類,b一定是類。在b的類中宣告,b要比a先定義出來,a可以任意訪問b中的所有成員,a類的所有成員函式都可以訪問b中的所有成員。

小結:

友元的尷尬能力

實際工程開發逐漸被遺棄 什麼是友元?友元是c 中的一種關係 友元關係發生在函式與類之間或者類與類之間 友元是單項的,不能傳遞。函式 友元 class 友元的用法 在類中以friend關鍵字宣告友元 類的友元可以是其它類或者具體的函式 友元不是類的一部分 友元不受類中訪問級別的限制 友元可以直接訪問具...

28 友元的尷尬能力

上一課 twophasecons ret new twophasecons 靜態成員內部,直接訪問類的私有成員?此處呼叫的是建構函式,不是普通成員變數。友元是c 中的一種關係,發生在函式與類之間或者類與類之間。友元關係是單項的,不能傳遞。在類中以friend關鍵字宣告友元,類的友元可以是其他類或者具...

28,友元的尷尬能力

1 友元是c 中的一種關係 2 友元關係發生在函式與類之間或類與類之間 3 友元關係是單項的,不能傳遞 classpointvoid func point p 全域性函式,引數是類的引用,接受乙個ponit物件p作為引數 通過引數物件名p,可以訪問point類內的任何成員!1 在類中以friend關...