一、友元在繼承中的關系
- 我們在友元的文章中介紹過,友元關系不能繼承。
- (1)友元關系不存在傳遞性,即每個類負責控制自己的友元類或者友元函數;
- (2)友元關系是單向的,不具有交換性。若類B是類A的友元,類A不一定是類B的友元,要看在類中是否有相應的聲明。
- (3)友元關系不能被繼承。
- 是以:
- 基類的友元不能通路派生類的新成員,但是仍可以通路派生類從基類繼承而來的成員/方法
- 派生類的友元也不能随意通路基類的成員
二、示範案例
class A {
private:
int a;
friend class C;
};
class B :public A {
private:
int b;
};
class C {
public:
int f(A a) { return a.a; }; //正确,因為C是A的友元,可以通路其任何成員
int f2(B b) { return b.a; }; //正确,因為B繼承了A,是以B中也包含了A的a
int f3(B b) { return b.b; }; //錯誤,C不是B的友元,不能通路其私有成員
};