類基本概念4 友元

2021-06-25 21:04:03 字數 1900 閱讀 9633

友元

友元機制允許乙個類將對其

非公有成員

的訪問權授予指定的函式或類

(對未被授權的函式或類,則阻止其訪問);友元的宣告以關鍵字

friend

開始,但是它只能出現在類定義的內部

。友元宣告可以出現在類中的任何地方

:友元不是授予友元關係的那個類的成員(而是將外部範圍的類或者函式定義為當前類的friend,那麼他們就可以訪問當前類的私有成員了)

,所以它們不受其宣告出現部分的訪問控制影響。 1

、友元關係

假設乙個視窗管理類window_mgr

可能需要訪問由其管理的screen

物件的內部資料。screen

應該允許其訪問自己的私有成員:

[cpp]view plain

copy

class

screen  

;  

window_mgr

的成員可以直接引用screen

的私有成員:

[cpp]view plain

copy

window_mgr &  

window_mgr::relocate(screen::index x,screen::index c,screen &s)    

注:友元可以是普通的非成員函式,或前面定義的其他類的成員,或整個類。

2、使其他類的成員函式成為友元,那麼window_mgr類的relocate函式可以訪問screen的私有成員

[cpp]view plain

copy

class

screen  

;  

3、友元宣告與作用域

需要注意友元宣告與友元定義之間的互相依賴。在前面的例子中,

類window_mgr

必須先定義。否則,screen

類就不能將乙個window_mgr

函式指定為友元。然而,

只有在定義類screen

之後,才能定義relocate

函式—— 畢竟,

它被設為友元是為了訪問類screen

的成員。

更一般地講

,必須先定義包含成員函式的類

,才能將成員函式設為友元。另一方面,

不必預先宣告類和非成員函式來將它們設為友元。

友元宣告將已命名的

類或非成員函式引入到外圍作用域中

。此外,

友元函式可以在類的內部定義

,該函式的作用域擴充套件到

包圍該類定義的作用域

???還不是很理解(希望理解的指教)

[cpp]view plain

copy

class

x    

};  

class

z    

};   4

、過載函式與友元關係

類必須將

過載函式集

中每乙個

希望設為友元的函式都宣告為友元

:

???[cpp]view plain

copy

class

screen  

;  //將該函式作為screen的友元

extern

std::ostream& storeon(std::ostream &, screen &);  

//該函式對screen沒有特殊的訪問許可權

extern

bitmap& storeon(bitmap &, screen &);  

七 4 友元類

include using namespace std class date 對date類的提前引用宣告 class time class date int main return 0 下面定義兩個類中的成員函式,要求不得再增加成員函式 注意體會在time的成員函式中可以呼叫date類的私有資料成員...

類 友元函式 友元類

友元函式不是當前類的成員函式,但它可以訪問該類所有的成員,包括私有成員 保護成員和公有成員。在類中宣告友元函式時,需在其函式名前加上關鍵字 friend。友元函式既可以是非成員函式,也可以是另乙個類的成員函式。class date date date int y,int m,int d void s...

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

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