zoukankan      html  css  js  c++  java
  • 访问控制和继承方式

    这部分内容比较繁琐,但很简单,在此条理地介绍一下。
    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列得到的。

  • 相关阅读:
    UFLDL深度学习笔记 (四)用于分类的深度网络
    UFLDL深度学习笔记 (三)无监督特征学习
    UFLDL深度学习笔记 (二)SoftMax 回归(矩阵化推导)
    UFLDL深度学习笔记 (一)反向传播与稀疏自编码
    【2016内推】计算机找工作面经
    关于最优化中的若干问题
    关于extern "C" 的用法
    浅谈多核CPU、多线程、多进程
    并发与并行
    多进程与多线程
  • 原文地址:https://www.cnblogs.com/houkai/p/3564284.html
Copyright © 2011-2022 走看看