友元,英語為friend,朋友的意思,朋友就是關係親密的兩個人,能夠分享物品的兩個人。
由此可見,友元在c++之中的作用,就是實現資料的方便訪問。
本文將從下面三個方面來闡述friend的功能:
先舉乙個生活中的例子。a和b是借貸關係,每次a找b貸款,都需要得到b的同意,這樣做很符合規矩。但是,有時候a頻繁的找b借錢,這樣b就頻繁的接待a,很耽誤自己的時間,而且也很麻煩。b就開始想辦法解決這個麻煩,他覺得a值得信任,可以做他的朋友,於是就告訴a,以後你來找我借錢,就直接到乙個地方拿,不需要經過我的允許。這樣,麻煩就解決了。但是,也導致了不安全。
同樣,在c++中,也是一樣的道理。先定義乙個類b:
class b
private:
int x;
};void func()
}
因為類的私有成員不能直接被訪問,所以func函式訪問b中的x,就必須要經過b的公共成員函式getx。但是如果將func宣告為b的友元,則就可以通過b的物件直接訪問x。修改如下,
class b
;//友元函式定義
void func(b & b)
}
從上一段中可以得知,全域性函式可以成為類的友元。除了全域性函式外,還有不同類的成員函式、類的物件都可以成為乙個類的友元。
//a類的成員函式為b類的友元函式
class b; //因為類a中使用了b的引用,所以必須要在類a之前進行這種不完全宣告。(注意:不完全宣告後,只能使用其引用和指標。)
class a
;class b
;int a::getadd(b & b)
假如類a的所有成員函式,都是去操作類b的成員變數。為了方便,可以直接把a宣告為b的友元,這樣就不需要乙個函式乙個函式的宣告了。
//a類為b類的友元函式
class b;
class a
;class b
;int a::getadd(b & b)
int a::getsub(b & b)
友元關係不能夠被繼承。
友元關係是單向的,不具有交換性。如果類a是類b的友元,那麼類b不一定是類a的友元,要看類中是否有相關的宣告。
友元關係不具備傳遞性。如果類a是類b的友元,類c是類a的友元,那麼類c不一定是類b的友元,要看類中是否有相關的宣告。
C 回顧之友元
總的來說,友元分為兩類 友元函式與友元類。友元是針對類而言,它提供了一種非類的成員函式來訪問類的非公有成員的一種機制。可以把乙個函式指定為某類的友元,這個函式稱為這個類的友元函式。也可以將類a指定為類b的友元,則類a是類b的友元類,類a的所有成員函式均是類b的友元函式,均可以訪問類b的非公有成員。友...
C 之友元函式
類的友元.cpp 定義控制台應用程式的入口點。include stdafx.h include include using namespace std class point 預設賦值建構函式,在建立物件時自動呼叫 int getx 隱藏有this指標,指向當前使用的物件,其實是return thi...
C 基礎之友元
友元函式 在本類中使用friend宣告外部的函式,則該外部函式就能訪問本類中的private protected成員。友元類 在本類中使用friend宣告外部的類,則該外部類就能訪問本類中private protected成員。友元關係沒有繼承性 b類是a類的友元,c類繼承a類,則b不能直接訪問c中...