友元背景:類具有封裝性和隱藏性。類中的成員函式可以訪問類的私有成員,類外**中的函式無法訪問類的私有成員;但是類外面的函式可以訪問類的公有成員,但是把成員資料設定為公有,又會破壞類的隱藏性。此外,在某些情況下,尤其是多次呼叫成員函式時,由於引數傳遞,型別檢查和安全性檢查都需要時間的開銷,而影響程式的執行效率。1.什麼是友元函式
2.友元的作用
3.友元的優缺點
4.什麼情況下可以使用友元
5.友元的使用
6.友元函式和成員函式的區別
為解決上述問題就有大佬提出了友元函式的概念
1.什麼是友元函式
c++中友元函式允許在類外訪問類該類中的任何成員,包括保護和私有成員,就像成員函式一樣,但是友元函式不是類的成員函式,所有不帶this指標。友元函式是一種定義在類外的普通函式,但是它必須用friend在類中進行宣告。
2.友元的作用
友元函式可以通過物件訪問所有成員包括私有和保護成員。在實現類之間資料共享時,減少系統開銷,提高效率。
3.友元的優缺點
優點:能夠提高效率,表達簡單、清晰。
缺點:友元函式破環了封裝機制,盡量不使用成員函式,除非不得已的情況下才使用友元函式。
4.什麼情況下可以使用友元
4.1 運算子過載的某些場合需要使用友元。
4.2 兩個類要共享資料的時候。
5.友元的使用
5.1友元函式的引數:
因為友元函式沒有this指標,則引數要有三種情況:
5.1.1 要訪問非static成員時,需要物件做引數;
5.1.2 要訪問static成員或全域性變數時,則不需要物件做引數;
5.1.3 如果做引數的物件是全域性物件,則不需要物件做引數;
5.2友元函式的位置
因為友元函式是類外的函式,所以它的宣告可以放在類的私有段或公有段且沒有區別。
5.3友元函式的呼叫
可以直接調用友元函式,不需要通過物件或指標
5.4友元函式的分類:
根據這個函式的**不同,可以分為三種方法:
5.4.1普通函式友元函式
目的:使普通函式能夠訪問類的友元
語法:宣告: friend + 普通函式宣告
實現位置:可以在類外或類中
實現**:與普通函式相同
呼叫:類似普通函式,直接呼叫
class date
;void display(const date& d)
;class date
{public:
void display()
{ cout<<_year<<"-"<<_month<
5.4.3 類y的乙個成員函式時另乙個類x的友元函式
目的: 使類date的乙個成員函式成為類time的友元
語法:宣告位置:宣告在公有中 (本身為函式)
宣告:friend + 成員函式的宣告
呼叫:先定義y的物件y---使用y呼叫自己的成員函式---自己的成員函式中使用了友元機制
6.友元函式和成員函式的區別
友元函式沒有this指標,成員函式有;友元函式不能被繼承
C 友元函式 友元類 友元成員函式
眾所周知,c 控制對類物件私有部分的訪問。通常,公有類方法提供唯一的訪問途徑,但是有時候這種限制太嚴格,以至於不適合特定的程式設計問題。在這種情況下,c 提供了另外一種形式的訪問許可權 友元,友元有3種 友元函式 友元類 友元成員函式。通過讓函式成為類的友元 即 友元函式 可以賦予該函式與類的成員函...
友元 友元函式 友元類和友元成員函式 C
有些情況下,允許特定的非成員函式訪問乙個類的私有成員,同時仍阻止一般的訪問,這是很方便做到的。例如被過載的操作符,如輸入或輸出操作符,經常需要訪問類的私有資料成員。友元 frend 機制允許乙個類將對其非公有成員的訪問權授予指定的函式或者類,友元的宣告以friend開始,它只能出現在類定義的內部,友...
友元 友元函式 友元類和友元成員函式 C
有些情況下,允許特定的非成員函式訪問乙個類的私有成員,同時仍阻止一般的訪問,這是很方便做到的。例如被過載的操作符,如輸入或輸出操作符,經常需要訪問類的私有資料成員。友元 frend 機制允許乙個類將對其非公有成員的訪問權授予指定的函式或者類,友元的宣告以friend開始,它只能出現在類定義的內部,友...