zoukankan      html  css  js  c++  java
  • 继承

    一,public protected private继承

    1,public继承

    ​ 父类的所有public属性,在子类中也是public。父类的protected属性,在子类中也是protected

    class Base {
    public:
      void show_base(){}
    protected:
      void print_base(){}
    private:
      int x;
    };
    
    class D : public Base {
      
    };
    
    int main(){
      D d;
      d.show_base();//可以调用父类的show_base()
      d.print_base();//不可以调用父类的print_base()
    }
    

    2,protected继承

    ​ 父类的所有public属性,在子类中是protected。父类的protected属性,在子类中也是protected

    class Base {
    public:
      void show_base(){}
    protected:
      void print_base(){}
    private:
      int x;
    };
    
    class D : protected Base {
      
    };
    
    int main(){
      D d;
      //编译不过
      d.show_base();//虽然show_base是父类的public方法,但是因为是protected继承,所以父类的show_base方法,变成了子类的protected方法
    }
    

    3,private继承

    ​ 父类的所有public,protected属性,在子类中都是private

    class Base {
    public:
      void show_base(){}
    protected:
      void print_base(){}
    private:
      int x;
    };
    
    class D : private Base {
      
    };
    
    int main(){
      D d;
      //编译不过
      d.show_base();//虽然show_base是父类的public方法,但是因为是private继承,所以父类的show_base方法,变成了子类的private方法
    }
    

    4,protected继承和private继承的区别

    假设class B 用private继承 class A 后,不管class C 用什么方式继承class B,class A里的public,protected属性,在class C里也是不可以访问的

    class Base {
    public:
      void show_base(){}
    protected:
      void print_base(){}
    private:
      int x;
    };
    
    class D : protected Base {
      
    };
    
    class C : private D {
    public:
      void show_c(){
        //编译通过
        show_base();//因为D是用protected继承的Base,所以Base里的所有public,protected属性,在D中都是protected的。
      }
    };
    
    int main(){
      D d;
      //编译不过
      d.show_base();//虽然show_base是父类的public方法,但是因为是private继承,所以父类的show_base方法,变成了子类的private方法
    }
    
    class Base {
    public:
      void show_base(){}
    protected:
      void print_base(){}
    private:
      int x;
    };
    
    class D : private Base {
      
    };
    
    class C : private D {
    public:
      void show_c(){
        //编译不过
        show_base();//因为D是用private继承的Base,所以Base里的所有属性,在D中都是private,从而导致C不能访问Base里的任何属性。
      }
    };
    
    int main(){
      D d;
      //编译不过
      d.show_base();//虽然show_base是父类的public方法,但是因为是private继承,所以父类的show_base方法,变成了子类的private方法
    }
    
  • 相关阅读:
    Omi新成员omi-router正式发布
    Omi架构与React Fiber
    Omi框架Store体系的前世今生
    Omi v1.0震撼发布
    omi-cli新版发布-升级webpack2和支持sass生成组件局部CSS
    Omi应用md2site-0.5.0发布-支持动态markdown拉取解析
    Omi应用md2site发布-markdown转网站利器
    AlloyTouch之无限循环select插件
    Omi教程-插件体系
    AlloyTouch之select选择插件
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/9134063.html
Copyright © 2011-2022 走看看