友元
友元機制允許乙個類將對其
非公有成員
的訪問權授予指定的函式或類
(對未被授權的函式或類,則阻止其訪問);友元的宣告以關鍵字
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 宣告 ...