c 友元函式

2022-03-13 04:17:54 字數 2932 閱讀 4633

友元函式

友元函式的目的

1、為什麼要引入友元函式?

在實現類之間資料共享時,減少系統開銷,提高效率。

具體來說:為了使其他類的成員函式直接訪問該類的私有變數,即:允許外面的類或函式去訪問類的私有變數和保護變數,從而使兩個類共享同一函式

優點:能夠提高效率,表達簡單、清晰

缺點:友元函式破環了封裝機制,盡量不使用成員函式,除非不得已的情況下才使用友元函式。

2、什麼時候使用友元函式?

1)運算子過載的某些場合需要使用友元。

2)兩個類要共享資料的時候

友元函式的引數

因為友元函式沒有this指標,則引數要有三種情況:

1、要訪問非static成員時,需要物件做引數;--常用(友元函式常含有引數)

2、要訪問static成員或全域性變數時,則不需要物件做引數

3、如果做引數的物件是全域性物件,則不需要物件做引數

友元函式的位置

因為友元函式是類外的函式,所以它的宣告可以放在類的私有段或公有段且沒有區別。

友元函式的呼叫

可以直接調用友元函式,不需要通過物件或指標

友元函式的分類

1)普通函式友元函式:

a) 目的:使普通函式能夠訪問類的友元

b) 語法:宣告位置:公有私有均可,常寫為公有

宣告: friend + 普通函式宣告

實現位置:可以在類外或類中

實現**:與普通函式相同(不加不用friend和類::)

呼叫:類似普通函式,直接呼叫

c) **: 

class

integer

;void print(const integer& obj)//

不使用friend和類::

void

main()

2)類y的所有成員函式都為類x友元函式—友元類

a)目的:使用單個宣告使y類的所有函式成為類x的友元

它提供一種類之間合作的一種方式,使類y的物件可以具有類x和類y的功能

具體來說:

前提:a是b的友元(a中成員函式可以訪問b中有所有成員,包括私有成員和公有成員)

則:在a中,借助類b,可以直接使用~b . 私有變數~的形式訪問私有變數

b)語法:宣告位置:公有私有均可,常寫為私有(把類看成乙個變數)

宣告: friend + 類名---不是物件啊

呼叫:c)**:

class

girl;

class

boy;

void boy::disp(girl &x) //

函式disp()為類boy的成員函式,也是類girl的友元函式

class

girl

; void

main()

3)類y的乙個成員函式為類x的友元函式

a)目的:使類y的乙個成員函式成為類x的友元

具體而言:而在類y的這個成員函式中,借助引數x,可以直接以x。私有變數的形式訪問私有變數

b)語法:宣告位置:宣告在公有中 (本身為函式)

宣告:friend + 成員函式的宣告

呼叫:先定義y的物件y---使用y呼叫自己的成員函式---自己的成員函式中使用了友元機制

c)**:

class

girl;

class

boy;

class

girl

;

void boy::disp(girl &x)

void

main()

4)在模板類中使用友元operator<<(對《運算子的過載)

a)使用方法:

在模板類中宣告:

friend ostream& operator

<< <>(ostream& cout,const mgraph& g);

在模板類中定義:

templateostream& operator

<<(ostream& cout,const mgraph&g)

b)注意:

把函式宣告非模板函式:

friend ostream& operator

<< (ostream& cout,const mgraph& g);

把函式宣告為模板函式:

friend ostream& operator

<< <>(ostream& cout,const mgraph& g);

或:

friend ostream& operator

<< (ostream& cout,const mgraph& g);

說明:在函式宣告中加入operator<< <>:是將operator《函式定義為函式模板,將函式模板申明為類模板的友員時,是一對一繫結的

實際的宣告函式:這裡模板引數可以省略,但是尖括號不可以省略

friend ostream& operator

<< (ostream& cout,const mgraph& g);

5)友元函式和類的成員函式的區別:成員函式有this指標,而友元函式沒有this指標。

6)記憶:a是b的友元《=》a是b的朋友《=》借助b的物件,在a中可以直接 通過b。成員變數(可以是公有,也可以為私有變數) 的方式訪問b

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

眾所周知,c 控制對類物件私有部分的訪問。通常,公有類方法提供唯一的訪問途徑,但是有時候這種限制太嚴格,以至於不適合特定的程式設計問題。在這種情況下,c 提供了另外一種形式的訪問許可權 友元,友元有3種 友元函式 友元類 友元成員函式。通過讓函式成為類的友元 即 友元函式 可以賦予該函式與類的成員函...

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

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

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

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