友元函式 友元類 友元成員

2021-10-01 19:27:46 字數 1265 閱讀 1450

友元(友元函式、友元類和友元成員函式) c++

有些情況下,允許特定的非成員函式訪問乙個類的私有成員,同時仍阻止一般的訪問,這是很方便做到的。例如被過載的操作符,如輸入或輸出操作符,經常需要訪問類的私有資料成員。

友元(frend)機制允許乙個類將對其非公有成員的訪問權授予指定的函式或者類,友元的宣告以friend開始,它只能出現在類定義的內部,友元宣告可以出現在類中的任何地方:友元不是授予友元關係的那個類的成員,所以它們不受其宣告出現部分的訪問控制影響。通常,將友元宣告成組地放在類定義的開始或結尾是個好主意。

友元函式是指某些雖然不是類成員函式卻能夠訪問類的所有成員的函式。類授予它的友元特別的訪問權,這樣該友元函式就能訪問到類中的所有成員。

#include using namespace std;

class a

;void set_show(int x, a &a) //友元函式定義,為了訪問類a中的成員

int main(void)

友元類的所有成員函式都是另乙個類的友元函式,都可以訪問另乙個類中的隱藏資訊(包括私有成員和保護成員)。當希望乙個類可以訪問另乙個類的私有成員時,可以將該類宣告為另一類的友元類。

關於友元類的注意事項:

(1) 友元關係不能被繼承。

(2) 友元關係是單向的,不具有交換性。若類b是類a的友元,類a不一定是類b的友元,要看在類中是否有相應的宣告。

(3) 友元關係不具有傳遞性。若類b是類a的友元,類c是b的友元,類c不一定是類a的友元,同樣要看類中是否有相應的申明。

#include using namespace std;

class a

;class c //友元類定義,為了訪問類a中的成員

;class a

};void b::set_show(int x, a &a) //只有在定義類a後才能定義該函式,畢竟,它被設為友元是為了訪問類a的成員

int main(void)

在需要允許某些特定的非成員函式訪問乙個類的私有成員(及受保護成員),而同時仍阻止一般的訪問的情況下,友元是可用的。

優點:可以靈活地實現需要訪問若干類的私有或受保護的成員才能完成的任務;

便於與其他不支援類概念的語言(如c語言、彙編等)進行混合程式設計;

通過使用友元函式過載可以更自然地使用c++語言的io流庫。

缺點:乙個類將對其非公有成員的訪問許可權授予其他函式或者類,會破壞該類的封裝性,降低該類的可靠性和可維護性。

友元函式 友元類 友元成員函式

注意友元成員函式定義的3個步驟 include include include using namespace std class a class c class a class b void c display const a a 3.最後定義display,此時才可以使用a的私有成員 void ...

友元函式 友元類 友元成員函式

一般來說,類內的私有資料是對外不可見的,但在有些情況下,我們需要在類外對該類的私有資料進行訪問,這就需要用到一種新技術 友元 friend 即在宣告前新增關鍵字friend。友元關係是單向的,即如果a是b的友元,但b不一定是a的友元 友元關係無傳遞性,即如果a是b的友元,b是c的友元,但a不一定是c...

友元函式 友元類 友元成員函式

有些情況下,允許非成員函式訪問類中的私有成員,但又阻止一般的訪問,這種情況,就需要用到友元。使用friend宣告友元,友元的定義只能在類的內部 有些情況下,全域性函式需要訪問類中的私有成員,這種函式叫友元函式 如 客人可以訪問客廳,但一般客人不可以去主人臥室,關係較好的朋友才能訪問私有的臥室,這時就...