版權(quán)歸原作者所有,如有侵權(quán),請(qǐng)聯(lián)系我們

[科普中國]-友元

科學(xué)百科
原創(chuàng)
科學(xué)百科為用戶提供權(quán)威科普內(nèi)容,打造知識(shí)科普陣地
收藏

友元是一種定義在類外部的普通函數(shù)或類,但它需要在類體內(nèi)進(jìn)行說明,為了與該類的成員函數(shù)加以區(qū)別,在說明時(shí)前面加以關(guān)鍵字friend。友元不是成員函數(shù),但是它可以訪問類中的私有成員。

研究背景類具有封裝和信息隱藏的特性。只有類的成員函數(shù)才能訪問類的私有成員,程序中的其他函數(shù)是無法訪問私有成員的。非成員函數(shù)可以訪問類中的公有成員,但是如果將數(shù)據(jù)成員都定義為公有的,這又破壞了隱藏的特性。另外,應(yīng)該看到在某些情況下,特別是在對(duì)某些成員函數(shù)多次調(diào)用時(shí),由于參數(shù)傳遞,類型檢查和安全性檢查等都需要時(shí)間開銷,而影響程序的運(yùn)行效率。1

為了解決上述問題,提出一種使用友元的方案。友元是一種定義在類外部的普通函數(shù)或類,但它需要在類體內(nèi)進(jìn)行說明,為了與該類的成員函數(shù)加以區(qū)別,在說明時(shí)前面加以關(guān)鍵字friend。友元不是成員函數(shù),但是它可以訪問類中的私有成員。友元的作用在于提高程序的運(yùn)行效率,但是,它破壞了類的封裝性和隱藏性,使得非成員函數(shù)可以訪問類的私有成員。不過,類的訪問權(quán)限確實(shí)在某些應(yīng)用場合顯得有些呆板,從而容忍了友元這一特別語法現(xiàn)象。

友元函數(shù)特點(diǎn)友元函數(shù)是能夠訪問類中的私有成員的非成員函數(shù)。友元函數(shù)從語法上看,它與普通函數(shù)一樣,即在定義上和調(diào)用上與普通函數(shù)一樣。

友元關(guān)系不具對(duì)稱性。即 A 是 B 的友元,但 B 不一定是 A 的友元。 友元關(guān)系不具傳遞性。即 B 是 A 的友元,C 是 B 的友元,但是 C 不一定是 A 的友元。

應(yīng)用實(shí)例下面舉一例子說明友元函數(shù)的應(yīng)用。

#include#includeusing namespace std;class Point{public: Point(double xx, double yy) { x = xx; y = yy; }; void Getxy(); friend double Distance(Point &a, Point &b);private: double x, y;};void Point::Getxy(){ cout