C++ 友元函數詳解:友元函數和成員函數的區別?
友元函數允許外部函數訪問類中的私有或受保護成員,通過在類定義中用 friend 關鍵字聲明。與成員函數不同,友元函數聲明在類外部,可訪問類的私有和保護成員,而成員函數在類內部聲明,可訪問類所有成員。友元函數用作普通函數調用,而成員函數用類對象調用,在需要外部訪問私有或受保護成員時使用友元函數,在類內部使用成員函數時使用成員函數。
C++ 友元函數詳解:友元函數與成員函數的區別
友元函數
友元函數是一種允許外部函數訪問類中的私有和保護成員的特殊函數。它通過在類定義中使用 關鍵字聲明。
語法:
class MyClass {
friend void myFriendFunction();
...
};
成員函數
成員函數是屬于類的函數,可以訪問其私有和保護成員。
語法:
class MyClass {
void myMemberFunction();
...
};
友元函數和成員函數的區別
實戰案例
考慮一個 類,它具有私有的 成員:
class Student {
private:
int marks;
...
};
我們可以使用友元函數 來計算學生的平均成績,該函數可以訪問 :
// 友元函數
friend double calculateAverage(Student& student);
// 計算學生的平均成績
double calculateAverage(Student& student) {
return student.marks / 3;
}
我們也可以使用成員函數來計算平均成績,但它只能在 類中使用:
// 類的成員函數
double getAverage() {
return marks / 3;
}
友元函數提供了一種機制,允許外部函數訪問類的私有和保護成員,而不需要使這些成員對外部世界可見。成員函數可以訪問類的所有成員,但只能在類內部使用。
相關推薦
-
C++ 虛擬函數與元編程:突破編譯時限制的利器
虛擬函數和元編程是 c++++ 中克服編譯時限制的利器,可實現復雜且可擴展的代碼。虛擬函數支持多態,元編程允許在編譯時操作和生成代碼。通過結合使用它們,我們可以創建通用數據結構、動態生成代碼等等,從而
-
C++ 虛擬函數與多線程:探索并行編程中的多態挑戰
在多線程環境中使用虛擬函數可能會導致競爭條件,出現數據損壞或未定義行為。解決方案:1. 使用互斥鎖保護共享資源。2. 每個線程在調用虛擬函數前獲取互斥鎖,確保并發安全。C++ 虛擬函數與多線程:揭開并
-
golang函數類型的序列化與反序列化
golang 函數類型可通過 encoding/gob 包實現序列化和反序列化。序列化:注冊自定義類型并使用 gob.newenr 將函數類型編碼為字節數組。反序列化:使用 gob.newde
-
C++ 虛擬函數深入剖析:類型擦除與多態實現
c++++虛函數實現多態,通過類型擦除將對象類型信息分離,使編譯器僅識別公共接口。虛指針表存儲虛函數地址,當基類指針指向派生類對象時,指向派生類虛指針表的派生類指針將替代基類指針指向的虛指針表,從而實
-
golang函數的未來人才培養
培養 golang 函數式編程人才至關重要,為此需要:深入理解函數式編程原理動手實踐練習使用函數式編程工具和庫設定需要函數式編程技能的項目和挑戰Golang 函數的未來人才培養隨著 Golang 生態















