阿摩線上測驗 登入

申論題資訊

試卷:103年 - 103 地方政府特種考試_四等_資訊處理:程式設計概要#30783
科目:程式設計
年份:103年
排序:0

申論題內容

朋友函式(friend function)(請試述下列物件導向程式語言名詞之意義與特性)

詳解 (共 2 筆)

詳解 提供者:114年高考上榜
朋友函式(friend function)是在C++中的一個特殊函式,它可以訪問某個類別的私有成員。
 
與普通成員函式不同,朋友函式並不屬於該類別本身,它可以被定義在該類別外部,但在該類別的定義中進行聲明。
詳解 提供者:hchungw
在物件導向程式設計(OOP)中,特別是在C++中,朋友函式(friend function)是一個被允許訪問私有(private)和保護(protected)成員的非成員函式。即使它不是任何類的成員函式,朋友函式仍然可以訪問該類的所有私有和保護成員。朋友函式的概念幫助於在不破壞封裝原則的情況下,增強不同類之間的協作。
朋友函式的特性
訪問權限:朋友函式可以訪問其友元類中的所有成員,包括私有和保護成員。
非成員函式:即使朋友函式可以訪問類的私有成員,它本身不是類的成員函式。
互相獨立:一個函式可以是多個類的朋友,同時一個類可以有多個朋友函式。
顯式聲明:在類內部,需要明確聲明哪些函式是其朋友函式,這通常是在類定義中使用friend關鍵字完成。
用途
朋友函式常用於執行那些需要訪問類的私有或保護成員,但不適合作為類成員的操作。例如,重載某些運算子以使它們能夠用於自定義類型,往往需要將這些運算子函式聲明為朋友函式。
聲明朋友函式的例子
假設有一個表示箱子體積的類Box,我們想要通過一個非成員函式calculateVolume來計算箱子的體積,這時我們可以將calculateVolume函式聲明為Box類的朋友函式:


class Box {
    friend int calculateVolume(Box b);
private:
    int length;
    int width;
    int height;
public:
    Box(int l, int w, int h) : length(l), width(w), height(h) {}
};
int calculateVolume(Box b) {
    return b.length * b.width * b.height;
}
在這個例子中,calculateVolume函式被聲明為Box類的朋友,因此它可以訪問Box類的所有私有成員(在這裡是length、width和height)。
注意點
雖然朋友函式提供了方便的訪問控制機制,但過度使用可能會破壞封裝性,使得類的內部實現過於暴露。因此,在設計類時應謹慎使用朋友函式,僅在真正需要時才使用。