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方法
    }
    
  • 相关阅读:
    /bin,/sbin,/usr/sbin,/usr/bin 目录
    centos开放端口8080
    centos 创建用户组及用户
    oracle内存优化
    ORACLE概要文件
    【刷题】洛谷 P3834 【模板】可持久化线段树 1(主席树)
    【总结】莫比乌斯反演
    【刷题】洛谷 P3768 简单的数学题
    【刷题】BZOJ 4816 [Sdoi2017]数字表格
    【刷题】BZOJ 2693 jzptab
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/9134063.html
Copyright © 2011-2022 走看看