友元关系与继承

来源:互联网 发布:mac打开excel很慢 编辑:程序博客网 时间:2024/04/30 04:59

      像其他类一样,基类或派生类可以使其他类或函数成为友元(12.5节)。友元可以访问类的private和protected数据。

      注解:友元关系不能继承。基类的友元对派生类的成员没有特殊访问权限。如果基类被授予友元关系,则只有基类具有特殊访问权限,该基类的派生类不能访问授予友元关系的类。

      每个类控制对自己的成员的友元关系

class Base{friend class Frnd;protected:int i;};class D1:public Base{protected:int j;};//Frnd has no access to mebers in D1class Frnd{public:int mem(Base b){return b.i;} //ok:Frnd is friend to Baseint mem(D1 d){return d.j;}   //error:friendship doesn't inherit};//D2 has no access to members in Baseclass D2:public Frnd{public:int mem(Base b){return b.i;}  //eroor:friendship doesn't  inherit};


 


如果派生类想要将自己成员的访问权授予其基类的友元,派生类必须显式地这样做:基类的友元对从该基类派生的类型没有特殊访问权限。同样,如果基类和派生类都需要访问另一个类,那个类必须特地将访问权限授予基类和每一个派生类。

原创粉丝点击