友元:打破封裝的受控通道
類的私有成員默認不可外部訪問。友元機制允許特定非成員函數或另一類訪問私有/保護成員,提升效率但削弱封裝性,需謹慎使用。
1. 友元函數
- 定義在類外的普通函數,不屬於任何類。
- 在類內聲明:
friend 返回類型 函數名(參數列表);
- 聲明位置無關緊要(public/private/protected 效果相同)。
- 一個函數可為多個類的友元,需在各類中分別聲明。
- 調用方式與普通函數無異。
2. 友元類
- 聲明:
friend class 類名;
- 效果:友元類的所有成員函數均成為原類的友元函數,可訪問私有/保護成員。
- 示例:
class A { friend class B; }; → B 的所有成員可訪問 A 的私有成員。
友元關係特性
- 無對稱性:B 是 A 的友元類 ⇏ A 是 B 的友元類。
- 無傳遞性:B 是 A 友元,C 是 B 友元 ⇏ C 是 A 友元。
相關文章