友元函數允許外部函數訪問類中的私有或受保護成員,通過在類定義中用 friend 關鍵字聲明。與成員函數不同,友元函數聲明在類外部,可訪問類的私有和保護成員,而成員函數在類內部聲明,可訪問類所有成員。友元函數用作普通函數調用,而成員函數用類對象調用,在需要外部訪問私有或受保護成員時使用友元函數,在類內部使用成員函數時使用成員函數。
C++ 友元函數詳解:友元函數與成員函數的區別
友元函數
友元函數是一種允許外部函數訪問類中的私有和保護成員的特殊函數。它通過在類定義中使用 friend
關鍵字聲明。
語法:
class MyClass { friend void myFriendFunction(); ... };
登錄后復制
成員函數
成員函數是屬于類的函數,可以訪問其私有和保護成員。
語法:
class MyClass { void myMemberFunction(); ... };
登錄后復制
友元函數和成員函數的區別
特征 | 友元函數 | 成員函數 |
---|---|---|
可訪問性 | 可以訪問類的私有和保護成員 | 可以訪問類的所有成員 |
聲明位置 | 在類外部 | 在類內部 |
作用域 | 全局 | 類內部 |
調用方式 | 像普通函數一樣調用 | 使用類對象調用 |
實戰案例
考慮一個 Student
類,它具有私有的 marks
成員:
class Student { private: int marks; ... };
登錄后復制
我們可以使用友元函數 calculateAverage()
來計算學生的平均成績,該函數可以訪問 marks
:
// 友元函數 friend double calculateAverage(Student& student); // 計算學生的平均成績 double calculateAverage(Student& student) { return student.marks / 3; }
登錄后復制
我們也可以使用成員函數來計算平均成績,但它只能在 Student
類中使用:
// 類的成員函數 double getAverage() { return marks / 3; }
登錄后復制
結論
友元函數提供了一種機制,允許外部函數訪問類的私有和保護成員,而不需要使這些成員對外部世界可見。成員函數可以訪問類的所有成員,但只能在類內部使用。