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方法
    }
    
  • 相关阅读:
    SET ROWCOUNT,SET NOCOUNT
    JS是按值传递还是按引用传递?
    Debug目录、Release目录,bin目录、obj目录,vshost.exe.config文件、.exe.config文件分析【C#】
    写window应用程序日志System.Diagnostics.EventLog.WriteEntry
    X-UA-Compatible设置兼容模式
    Linq的Distinct方法的扩展
    SQL Server 系统表简介
    sql server 常用的系统存储过程
    C# Timer用法及实例详解
    ASP.NET MVC内置的Filter实现介绍
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/9134063.html
Copyright © 2011-2022 走看看