zoukankan      html  css  js  c++  java
  • C++学习之继承中的成员访问控制

    由基类到派生类的过程中,在派生类里如何访问基类成员,以及派生类对象如何访问基类成员,是根据派生类在从基类派生时是以什么方式进行的派生:public、protect或者private。下面说一下在这三种派生方式下成员函数和成员变量的访问和修改权限。派生类是指直接派生类!

    【代码1】

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    class Base{
        //其他内容
    public:
        int BaseFunPb(){return m_nPb;}
        int BaseFunPt(){return m_nPt;}
        int BaseFunPr(){return m_nPr;}
    public:     int m_nPb;
    protectedint m_nPt;
    private:    int m_nPr;
    };
    class Cpb:public Base{
        //其他内容
    public:
        int GetPb(){return m_nPb;}
        int GetPt(){return m_nPt;}
        int GetPr(){return m_nPr;}
    };
    class Cpt:protected Base{
        //其他内容
    public:
        int GetPb(){return m_nPb;}
        int GetPt(){return m_nPt;}
        int GetPr(){return m_nPr;}
    };
    class Cpr:private Base{
        //其他内容
    public:
        int GetPb(){return m_nPb;}
        int GetPt(){return m_nPt;}
        int GetPr(){return m_nPr;}
    };
       
    int main()
    {
        Cpb objB;
        Cpt objT;
        Cpr objR;
        //其他内容
    }

    访问分为:类对象访问、类内访问两种;

    对于基类继承下来的成员的访问与修改权限如下:

    基类成员访问权限(列
    public   protected   private  
    派生方式(行) 派生类对象 派生类类内 派生类对象
    派生类类内
    派生类对象
    派生类类内
    public 可访/可修 权限:public
    可访/可修
    可访/不可修 权限:protected
    可访/不可修
    可访/不可修 权限:private
    可访/不可修
    protected 可访/不可修 权限:protected
    可访/可修
    可访/不可修 权限:private
    可访/可修
    可访/不可修 权限:private
    不可访/不可修
    private 可访/不可修 权限:private
    可访/可修
    可访/不可修 权限:private
    可访/可修
    可访/不可修 权限:private
    可访/不可修

    派生类内不管是 public、protected、private 继承,总是可以访问基类中的public、protected 成员,基类中的 private 成员永远不能在派生类内直接访问,不论通过哪种方式。

    派生类对象仅当public派生时,对基类中的public成员有可访问/可修改的权限,其他都为不可访问/不可修改。

    用‘B’代表public,用'T‘代表protected,用'R’代表private;BT->T代表基类成员访问权限为B,派生方式为T,派生后成员在派生类内的访问权限为T;‘r'表示可访问,’w'代表可修改,‘-'表示不可访问或不可修改,在第一位表示不可访,在第二位表示不可修;则上表简化为如下:

    访问权限变更
    派生类对象 派生类类内 访问权限变更 派生类对象 派生类类内 访问权限变更
    派生类对象 派生类类内
    BB->B rw rw TB->T -- r- RB->R -- --
    BT->T -- r- TT->R -- r- RT->R -- --
    BR->R -- r- TR->R -- r- RR->R -- --

    当派生类下面还有派生类时,派生类作为基类,权限更改同上!



  • 相关阅读:
    文件监控(教学版)
    设备读写 之 直接方式(Direct I/O)
    过滤驱动加密文件(代码)
    Why ASMLIB and why not?
    SQL调优:Clustering Factor影响数据删除速度一例
    监控一个大事务的回滚
    crsctl status resource t init in 11.2.0.2 grid infrastructure
    Script:收集Oracle备份恢复信息
    Only ARCH Bgprocess may create archivelog?
    11g新特性:A useful View V$DIAG_INFO
  • 原文地址:https://www.cnblogs.com/lomper/p/4104542.html
Copyright © 2011-2022 走看看