C 友元函式和友元類

2022-08-16 20:00:19 字數 1129 閱讀 6289

友元函式(全域性函式) : 

成員函式具有this指標,友元函式沒有this指標;

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

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

友元函式的宣告可以放在類的私有部分,也可以放在公有部分,它們是沒有區別的,都說明是該類的乙個友元函式。

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

友元函式的呼叫與一般函式的呼叫方式和原理一致。

友元類 : 

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

當希望乙個類可以訪問另乙個類的私有成員時,可以將該類宣告為另一類的友元類。定義友元類的語句格式如下:

friend class 類名;

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

#includeclass

dog;

class

cat;

void eat(const dog &dog,const cat &cat);

class

dog

void

hobby();

friend

void eat(dog &dog,cat &cat); //

友元函式

};class

cat

void rob(const dog &dog);

void

hobby();

friend

void eat(dog &dog,cat &cat); //

友元函式

};void

dog::hobby()

void eat(dog &dog,cat &cat)

void

cat::hobby()

void cat::rob(const dog &dog)

intmain()

注意:如果將class dog 裡friend class cat的friend去掉,那麼函式就會報錯。

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

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

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

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

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

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