王桂林講C 之友元

2021-07-25 09:50:13 字數 1233 閱讀 5076

友元,英語為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中...