友元函式的總結

2021-07-11 17:34:15 字數 1815 閱讀 8626

1.關鍵字friend只出現在類定義的內部(這點與const不同)

2.友元是授予友元關係的那個類的成員

3.定義類b為類a的友元,b可以訪問a的私有成員

[cpp]view plain

copy

例1:/*要注意友元的使用順序,宣告b->定義a->定義b*/

class

b;/*只宣告而未定義的類稱為不完全類,可用定義型別,不能用於定義物件*/

class

a    

friend

b;/*將b宣告為友元,b可以訪問a的private*/

};    

class

b    

intget()    

};    

intmain()    

4.定義類b的test()函式為類a的友元,b的test()函式可以訪問a的私有成員

[cpp]view plain

copy

例2:/*要注意友元的使用順序,

宣告a->定義b(要作為友元的那個函式只宣告不定義)->定義a->定義b的函式*/

class

a;/*只宣告而未定義的類稱為不完全類,可用定義型別,不能用於定義物件*/

class

b    

};  

class

a    

friend

void

b::test(a a);

/*將b的test()宣告為友元,b的test()可以訪問a的private*/

};  

void

b::test(a a)  

intmain()    

5.友元宣告將已命名的類或非成員函式引入到外圍作用域中。此外,友元函式可以在類的內部定義,該函式的作用域擴充套件到包圍該類定義的作用域。

例3:[cpp]view plain

copy

/*本來a和f()的作用域只限於在它們宣告之後。

但是因為類b提前引入了它們,使得它們的作用域與類b的作用域相同*/

class

b  ;  

class

c    

};  

class

a;  

void

f()  

intmain()    

6.友元函式的過載函式,如果要成為友元,必須要用friend宣告。

例4:[cpp]view plain

copy

class

a;/*只宣告而未定義的類稱為不完全類,可用定義型別,不能用於定義物件*/

class

b    

};  

class

a    

friend

void

b::test(a a);

/*將b的test()宣告為友元,b的test()可以訪問a的private*/

friend

void

b::test(a a1, a a2);  

};  

//正確,因為已經被定義為友元

void

b::test(a a)  

//正確,因為已經被定義為友元

void

b::test(a a1, a a2)  

//錯誤,不能因為test(a a)是友元,就認為它的過載也是友元

void

b::test(a a1, a a2, a a3)  

友元(友元函式 友元類 類成員函式的友元)

friend 友元機制 允許乙個類將對其非公有成員的訪問許可權授予指定的函式或者類。我們可以將友元大致分為3類 友元函式 是指某些雖然不是類的成員函式,但是能夠訪問這個類的所有成員的函式。比如我們下列的 include class test friend void show test rhs 宣告 ...

C 友元函式及友元類的總結

友元函式 友元函式是可以訪問類的私有成員的函式。他一般是在類外定義的全域性函式,不屬於任何類。子啊使用前,需要在待訪問的類中申明。宣告時需要加上friend關鍵字。格式 friend 資料型別 函式名 型別1 引數1 在相應的類中申明 class animal friend void show an...

C 總結 友元類和友元函式

windows環境多執行緒程式設計原理與應用 中解釋 如果將類的封裝比喻成一堵牆的話,那麼友元機制就像牆上了開了乙個門,那些得 到允許的類或函式允許通過這個門訪問一般的類或者函式無法訪問的私有屬性和方法。友元機制使類的封裝性得到消弱,所以使用時一定要慎重。友元類的說明將外 界的某個類在本類別的定義中...