默認情況下,類無法訪問另一類的私有成員。即使繼承也不行(private 不可繼承訪問)。
在類 A 中聲明 friend class B;,則 B 成為 A 的友元,可訪問 A 的所有私有/保護成員(包括構造/析構)。
#include
class A {
friend class B; // 關鍵聲明
private:
int a;
public:
A() : a(1) {}
};
class B {
public:
void printA(A &obj) { std::cout << obj.a << std::endl; } // 訪問 A::a
};
int main() {
A a; B b; b.printA(a); // 輸出 1
return 0;
}
同理,可聲明全局函數或其它類成員函數為友元:friend void func(A&); 或 friend void B::method(A&);。
operator<< 需訪問私有流數據)、緊密協作的類對(如容器與迭代器)、單例模式的特定訪問器。友元是 C++ 為特定場景提供的「後門」,使用時需權衡封裝性與便利性,遵循「最小權限原則」。