C 友元函式

2021-08-27 08:15:57 字數 1566 閱讀 8044

友元

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開始,它只能出現在類定義的內部,友...