友元函式和友元類

2021-07-13 20:46:38 字數 1395 閱讀 2554

友元提供了一種 普通函式或者類成員函式 訪問另乙個類中的私有或保護成員 的機制。也就是說有兩種形式的友元:

(1)友元函式:普通函式對乙個訪問某個類中的私有或保護成員。

(2)友元類:類a中的成員函式訪問類b中的私有或保護成員。

優點:提高了程式的執行效率。

缺點:破壞了類的封裝性和資料的透明性。

3.1.1.宣告和定義

在類宣告的任何區域中宣告,而定義則在類的外部。

[cpp]view plain

copy

friend

《型別》《友元函式名》(《參數列》);  

注意,友元函式只是乙個普通函式,並不是該類的類成員函式,它可以在任何地方呼叫,友元函式中通過物件名來訪問該類的私有或保護成員。

3.1.2.示例

[cpp]view plain

copy

// testfriend.cpp

#include "stdafx.h"

class

a  ;  

friend

intgeta_a(a &_classa);

//友元函式

private

:  int

a;  

};  

intgeta_a(a &_classa)  

int_tmain(

intargc, _tchar* argv)    

3.2.1.宣告和定義

友元類的宣告在該類的宣告中,而實現在該類外。

[cpp]view plain

copy

friend

class

《友元類名》;  

友元類的例項則在main函式中定義。

3.2.2.示例

[cpp]view plain

copy

// testfriend.cpp

#include "stdafx.h"

class

b  ;  

friend

class

c;//宣告友元類c

private

:  int

b;  

};  

class

c//實現友元類c

;  };  

int_tmain(

intargc, _tchar* argv)    

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

加入類b是類a的友元,類c是類b的友元,那麼友元類c是沒辦法直接訪問類a的私有或保護成員,也就是不存在「友元的友元」這種關係。

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

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

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

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

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

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