C (十四)友元函式和友元類

2021-10-03 06:06:32 字數 1094 閱讀 5780

在c++中,私有成員只能在類的成員函式內部訪問,如果想在別處訪問物件的私有成員,只能通過類提供的介面(成員函式)間接地進行。這固然能夠帶來資料隱藏的好處,利於將來程式的擴充,但也會增加程式書寫的麻煩。

比如:你自己的臥室,除了你的家人可以(參觀)訪問外,你可以讓一些信任的好友進入你的臥室,對他們公開一些自己的隱私。

在定義乙個類的時候,可以把一些函式(包括全域性函式和其他類的成員函式)宣告為「友元」,這樣那些函式就成為該類的友元函式,在友元函式內部就可以訪問該類物件的私有成員了。

將全域性函式宣告為友元的寫法如下:

friend 返回值型別 函式名(參數列);

類的成員函式宣告為友元的寫法如下:(不能把其他類的私有成員函式宣告為友元。)

friend 返回值型別 其他類的類名::成員函式名(參數列);

#include

using

namespace std;

class

ccar

;//提前宣告ccar類,cdriver類使用到ccar類的指標

class

cdriver

;class

ccar

;void cdriver::

modifycar

(ccar* pcar)

intmostexpensivecar

(ccar cars,

int total)

//求最貴氣車的**

intmain()

;class

cdriver};

intmain()

注意:

友元關係沒有繼承性

假如類b是類a的友元,類c繼承於類a,那麼友元類b是沒辦法直接訪問類c的私有或保護成員。

友元關係沒有傳遞性

友元關係在類之間不能傳遞,即類 a 是類 b 的友元,類 b 是類 c 的友元,並不能匯出類 a 是類 c 的友元。「咱倆是朋友,所以你的朋友就是我的朋友」這句話在 c++ 的友元關係上不成立。

關於友元類詳情,可以檢視:

C (三十四) 友元函式 友元類

友元是可以訪問類的私有成員和保護成員的外部函式。由 friend 修飾,不是本類的成員函式,但是在它的函式體中可以通過物件名訪問本類的私有和保護成員。友元關係不可傳遞,且是單向的。友元函式 宣告為友元的一般函式或是另乙個類的成員函式 友元類 友元類的所有成員函式都是某個類的友元函式。應用場景較少。1...

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

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

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

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