第15章 面向对象编程(5)
15.2.6 友元关系与继承
像其他类一样,基类或派生类可以使其他类或函数称为友元。友元可以访问类的private和protected数据。
友元关系不能继承。基类的友元对派生类的成员没有特殊访问权限。如果基类被授予友元关系,则只有基类具有特殊访问权限,该基类的派生类不能访问授予友元关系的类。
每个类控制对自己的成员的友元关系。
如果派生类想要将自己成员的访问授予其基类的友元,派生类必须显式地这样做:基类的友元对从该基类派生的类型没有特殊访问权限。同样,如果基类和派生类都需要访问另一个类,那个类必须特地将访问权授予基类和每一个派生类。
class Base{
friend class Friend;
friend class ChildFriend;
private:
int i;
};
class Child1:private Base{
friend class Friend;
friend class ChildFriend;
private:
int j;
};
class Friend
{
public:
int mem(Base b){return b.i;}
int mem(Child1 c){return c.i+c.j;}
};
class ChildFriend:public Friend
{
public:
int cmem(Base b){return b.i;}
int cmem(Child1 c){return c.i+c.j;}
};
15.2.7 继承与静态成员
如果基类定义了static成员,则整个继承层次中只有一个这样的成员。无论从基类派生出多少个派生类,每个static成员只有一个实例。
static成员遵循常规访问控制:如果成员在基类中为private,则派生类不能访问它。假定可以访问成员,则既可以通过基类访问static成员,也可以通过派生类访问static成员。一般而言,既可以使用作用域操作符也可以使用点或箭头成员访问操作符。
class Base{
protected:
static int i;
};
class Child:public Base{
void f(const Child &c)
{
c.i;
Base::i;
Child::i;
i;
}
};
摘自 xufei96的专栏
补充:软件开发 , C++ ,