• 继承


    一,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方法
    }
    
  • 相关阅读:
    MySQl数据约束练习
    MySQL查询实例
    网络通信协议简介(TCP与UDP)
    数据类型转换
    C++编译过的C代码为什么要用extern C
    hashtable
    以RB-tree为底层机制的几个关联式容器
    红黑树(RB-Tree)
    slist
    deque
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/9134063.html
Copyright © 2020-2023  润新知