友元機制打破封裝,允許類外函數或類訪問類的 private/protected 成員。友元聲明在類內部,不受訪問控制限制。
class A {
int id;
friend void display(A& a); // 聲明
};
void display(A& a) { cout << a.id; } // 定義可訪問私有成員
class A { int id; friend class B; };
class B {
public:
static void show(A& a) { cout << a.id; } // B 所有成員可訪問 A 私有
};
需前置聲明類,再在類內聲明具體成員函數為友元。
class A; // 前置聲明
class B {
public:
void showA(A& a);
};
class A {
int id;
friend void B::showA(A& a); // 開放給 B::showA
};
void B::showA(A& a) { cout << a.id; } // 定義在 A 完整定義後
this 指針。operator<< 需訪問私有成員)。慎用:過度使用破壞封裝,增加耦合。