(1).?友元函數(shù)為了實(shí)現(xiàn)類之間數(shù)據(jù)共享時(shí),減少系統(tǒng)開銷巧婶,提高效率乾颁。允許外面的類或函數(shù)去訪問(wèn)類的私有變量和保護(hù)變量,從而使兩個(gè)類共享同一函數(shù)艺栈。
優(yōu)點(diǎn):能夠提高效率英岭,表達(dá)簡(jiǎn)單、清晰
缺點(diǎn):友元函數(shù)破環(huán)了封裝機(jī)制湿右,盡量不使用成員函數(shù)诅妹,除非不得已的情況下才使用友元函數(shù)。
(2).大概有下面兩種情況需要使用友元函數(shù):1)運(yùn)算符重載的某些場(chǎng)合需要使用友元 毅人;2)兩個(gè)類要共享數(shù)據(jù)的時(shí)候吭狡。
(3).友元函數(shù)使用
(3.1).友元函數(shù)的參數(shù)。因?yàn)橛言瘮?shù)沒(méi)有this指針丈莺,則參數(shù)要有三種情況:1)要訪問(wèn)非static成員時(shí)划煮,需要對(duì)象做參數(shù),常見(友元函數(shù)常含有參數(shù));2) 要訪問(wèn)static成員或全局變量時(shí)缔俄,則不需要對(duì)象做參數(shù)弛秋;3) 如果做參數(shù)的對(duì)象是全局對(duì)象,則不需要對(duì)象做參數(shù)俐载。
(3.2)友元函數(shù)的位置蟹略。因?yàn)橛言瘮?shù)不屬于該類,所以它的聲明可以放在類的私有段或公有段且沒(méi)有區(qū)別遏佣。同理挖炬,可以直接調(diào)用友元函數(shù),不需要通過(guò)對(duì)象或指針
(4).友元函數(shù)具體實(shí)現(xiàn)
(4.1)普通函數(shù)友元函數(shù):
1)?目的:使普通函數(shù)能夠訪問(wèn)類的友元状婶;
2) 語(yǔ)法:聲明位置:公有私有均可意敛,常寫為公有;
3)聲明: friend?+ 普通函數(shù)聲明
4)實(shí)現(xiàn)位置:可以在類外或類中
5)實(shí)現(xiàn)代碼:與普通函數(shù)相同(不加不用friend和類::)
6)調(diào)用:類似普通函數(shù)太抓,直接調(diào)用
(4.2)類Y的所有成員函數(shù)都為類X友元函數(shù)—友元類:
a)目的:使用單個(gè)聲明使Y類的所有函數(shù)成為類X的友元空闲,它提供一種類之間合作的一種方式,使類Y的對(duì)象可以具有類X和類Y的功能
具體來(lái)說(shuō):A是B的友元走敌,A中成員函數(shù)可以訪問(wèn)B中有所有成員,包括私有成員和公有成員
b)語(yǔ)法:聲明位置:公有私有均可逗噩,常寫為私有(把類看成一個(gè)變量)
聲明:friend?+?類名---不是對(duì)象啊
c)代碼:
girl.hpp
main.cpp
(4.3)類Y的一個(gè)成員函數(shù)為類X的友元函數(shù)
a)目的:使類Y的一個(gè)成員函數(shù)成為類X的友元
具體而言:而在類Y的這個(gè)成員函數(shù)中掉丽,借助參數(shù)X跌榔,可以直接訪問(wèn)類X私有變量
b)語(yǔ)法:聲明位置:聲明在公有中?
聲明:friend?+?成員函數(shù)的聲明
調(diào)用:先定義Y的對(duì)象y---使用y調(diào)用自己的成員函數(shù)---自己的成員函數(shù)中使用了友元機(jī)制
c)代碼: