C 回顧之友元

2021-06-20 11:55:19 字數 1575 閱讀 9045

總的來說,友元分為兩類:友元函式與友元類。友元是針對類而言,它提供了一種非類的成員函式來訪問類的非公有成員的一種機制。可以把乙個函式指定為某類的友元,這個函式稱為這個類的友元函式。也可以將類a指定為類b的友元,則類a是類b的友元類,類a的所有成員函式均是類b的友元函式,均可以訪問類b的非公有成員。

友元函式的注意事項:

(1)友元函式不是類的成員函式,在函式體中訪問物件的成員,必須用「物件名.物件成員"方式來訪問, 友元函式可以訪問類中的所有成員(公有,私有,保護),而一般的函式只能訪問類的公有成員。

(2)友元函式不受類中的訪問許可權關鍵字的限制,可以將它放在類的公有,私有,保護部分,結果均一樣。

(3)某類的友元函式的作用域並非該類作用域,如果該友元函式是另一類的成員函式,則其作用域為另一類的作用域,否則與一般函式相同。

(4)友元函式破壞了物件導向設計的封裝特性。所以應該盡量少用。

友元類

如果某類b的成員函式會頻繁地訪問類a的資料成員,而類a的資料成員的private/protected限制造成了類b訪問的麻煩,b只能通過a的public的成員函式進行間接訪問。這種情況下可以將類b作為類a的友元類,即類a向類b提供私有和保護成員的訪問許可權,讓類b可以直接訪問。

友元類中的所有成員函式均可以看作是另一類的友元函式。

友元類的宣告: friend chass 類名;

下面是友元函式的例子

友元函式可以在類中宣告,宣告時在函式前增加friend關鍵字,然後在類體外定義,也可以直接在類中宣告定義。這兩種方式均可。下面例子中採取的是類中宣告,類體外定義的方式。

class point

;private:

int x_;

int y_;

};//類體外定義友元函式

double distance(const point &p1, const point &p2)

int main()

下面是友元類的例子:

class television  //電視類

private:

int volume_; //音量

int chanel_; //頻道

};class telecontroller //遙控器類

void volumedown(television &tv)

void chanelup(television &tv)

void chaneldown(television &tv)

};int main()

友元類需要注意以下幾點:

(1)友元關係是單向的; 

(2) 友元關係不能被傳遞: a是b的友元,b是c的友元,則a是c的友元,這種傳遞不成立

(3) 友元關係不能繼承:   a是b的友元,a的派生類c也是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中...

C 之 友元類

友元類的全部成員函式都是還有乙個類的友元函式。都能夠訪問還有乙個類中的隱藏資訊 包含私有成員和保護成員 當希望乙個類能夠訪問還有乙個類的私有成員時,能夠將該類宣告為還有一類的友元類。定義友元類的語句格式例如以下 friend class 類名 當中 friend和class是關鍵字,類名必須是程式中...