当前位置:编程学习 > C/C++ >>

第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++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,