c 筆記7 友元函式及友元類

2021-09-07 19:21:23 字數 917 閱讀 1081

一、友元

作用:提高了程式的執行效率(減小了型別的檢查和安全性檢查所需的時間開銷,以及避免通過成員函式訪問私有成員變數壓棧出棧等操作),但破壞了類的封裝特性,使得非成員函式可以訪問類的私有成員。格式如下:

friend 型別 函式名(形式引數);

二、友元函式

友元函式是可以直接訪問類的私有成員的非成員函式。它是定義在類外的普通函式,不屬於任何類,但要在類的定義中進行宣告,宣告時只需在友元函式的名稱前加上關鍵字friend

乙個函式可以是多個類的有元函式,只需在各個類中分別宣告。

三、友元類

友元類的所有成員函式都是另乙個類的友元函式,都可以訪問另乙個類中的隱藏資訊(包括私有成員和保護成員)

當希望乙個類可以訪問另乙個類的私有成員時,可以將該類宣告為另一類

的友元類。定義友元類的語句格式如下:

friend class 類名;

其中:friend 和 class 是關鍵字,類名必須是程式中的乙個已定義過的類。

例如,以下語句說明類 b 是類 a 的友元類:

class a

;經過以上說明後,類 b 的所有成員函式都是類 a 的友元函式,能訪問類 a 的私有成員和保護成員。

四、友元注意事項

(1)宣告位置:友元宣告以關鍵字 friend 開始,它只能出現在類定義中。因為友元不是授權類的成員,所以它不受其所在類的宣告區域 public private 和protected 的影響。通常我們把所有友元宣告組織在一起並放在類頭之後.

(2)友元關係不能被繼承

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

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

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

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

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

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

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

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