一、友元在繼承中的關系
我們在友元的文章中介紹過,友元關系不能繼承。
(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的aint f3(B b) { return b.b; }; //錯誤,C不是B的友元,不能訪問其私有成員};