• 访问控制和继承方式


    这部分内容比较繁琐,但很简单,在此条理地介绍一下。
    1.首先,介绍:对类中成员的访问方式
    先举一个例子,了解水平访问和垂直访问

    #include "iostream.h"  
    using namespace std;  
    class A  
    {  
    private:  
        int ma;  
    public:  
        void afun(){}  
    };  
    class B:public A   
    {  
    private:  
        int mb;  
    public:  
        void bfun(){}  
    };  
    void B::bfun()  
    {  
        afun();             //垂直访<span style="font-size: 12px;">问,子类B中的成</span>员函数访问从A继承的afun()函数  
    }  
    void main()  
    {  
        A aobj;  
        aobj.afun();        //水平访问,外部函数(.函数)访问实例中的afun函数  
        B bobj;  
        bobj.afun();        //水平访问,访问bobj从A中继承的afun函数  
        bobj.bfun();        //水平访问,访问bobj的bfun函数  
    }

    访问包括两种方式:水平访问和垂直访问
    (1)水平访问,是指对类中成员的实例化使用;
    (2)垂直访问,指在使用继承时,派生类中成员函数对基类成员的访问。

    2.访问控制和继承方式
    访问控制被用于数据的封装和保护。可以从两个角度实现对类中数据的访问控制:设置类成员的访问属性和设置继承方式。
    类成员的访问属性有三种,即public、private和protected。
    公有成员允许外部函数访问;私有成员不允许外部函数访问,只允许本类的成员函数访问;保护成员不允许外部函数访问,但允许本类和其子类的成员函数访问。
    (1)继承方式对水平访问的影响(这是我们最常用见的)
    如下表:

    继承方式

    基类访问权限

    派生类访问权限

    对继承成员的水平访问(.函数)

    public

    public
    protected
    private

    public
    protected
    private

    yes
    no
    no

    private

    public
    protected
    private

    private
    private
    private

    no
    no
    no

    protected

    public
    protected
    private

    protected
    protected
    private

    no
    no
    no

    说明:若piblic>protected>private;那么派生类的访问权限=min(基类访问权限,继承方式),然后根据派生类中成员的访问属性确定水平访问权限。
    (2)继承方式对垂直访问的影响(垂直方向上如A派生B,B派生C)
    如下表:
    说明:1、继承方式只是改变了继承成员的访问权限,对父子类的垂直访问没有影响;
            2、只要父类中元素是public或protected,子类均可垂直访问。

    (A<-B)继承方式

    A中访问权限

    B中访问权限

    B中函数对继承成员的访问

    C中函数对继承成员的访问(B<-C的继承方式任意)

    public

    public
    protected
    private

    public
    protected
    private

    yes
    yes
    no

    yes
    yes
    no

    private

    public
    protected
    private

    private
    private
    private

    yes
    yes
    no

    no
    no
    no

    protected

    public
    protected
    private

    protected
    protected
    private

    yes
    yes
    no

    yes
    yes
    no

    总结:上表中第4列和第2列有关;第5列和第3列有关。如前所述,第3列是由1、2列得到的。

  • 相关阅读:
    qt捕鱼达人
    linux通过源码安装gdb
    打造简易http服务器
    linux缓存同步
    NOI之后的碎碎念
    Validate至少有一个不能为空
    IOI 2020 集训队作业
    P6033 [NOIP2004 提高组] 合并果子 加强版 题解
    P3017 [USACO11MAR]Brownie Slicing G 题解
    LOJ #145. DFS 序 2 题解
  • 原文地址:https://www.cnblogs.com/houkai/p/3564284.html
Copyright © 2020-2023  润新知