友元 友元函式 友元類和友元成員函式 C

2021-08-15 09:50:12 字數 1461 閱讀 3075

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

友元(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流庫。

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

1、《c++ prime》第4版 第12章類的友元小節

分類:

c++標籤:

c++好文要頂

關注我收藏該文

zhuguanhao

關注 - 0

粉絲 - 2

+加關注 00

currentdiggtype = 0;

virtualbox共享資料夾無訪問許可權問題解決方法

public,protect,private訪問許可權

友元函式 友元類 友元成員

友元 友元函式 友元類和友元成員函式 c 有些情況下,允許特定的非成員函式訪問乙個類的私有成員,同時仍阻止一般的訪問,這是很方便做到的。例如被過載的操作符,如輸入或輸出操作符,經常需要訪問類的私有資料成員。友元 frend 機制允許乙個類將對其非公有成員的訪問權授予指定的函式或者類,友元的宣告以fr...

友元 友元函式 友元類和友元成員函式 C

有些情況下,允許特定的非成員函式訪問乙個類的私有成員,同時仍阻止一般的訪問,這是很方便做到的。例如被過載的操作符,如輸入或輸出操作符,經常需要訪問類的私有資料成員。友元 frend 機制允許乙個類將對其非公有成員的訪問權授予指定的函式或者類,友元的宣告以friend開始,它只能出現在類定義的內部,友...

C 友元 友元函式 友元類和友元成員函式

有些情況下,允許特定的非成員函式訪問乙個類的私有成員,同時仍阻止一般的訪問,這是很方便做到的。例如被過載的操作符,如輸入或輸出操作符,經常需要訪問類的私有資料成員。友元 frend 機制允許乙個類將對其非公有成員的訪問權授予指定的函式或者類,友元的宣告以friend開始,它只能出現在類定義的內部,友...