zoukankan      html  css  js  c++  java
  • c/c++ 继承与多态 继承中的public, protected, private

    问题:类B私有继承类A,类A有个protected成员,那么在类B的成员函数里是否可以使用类A的protected成员?

    可以使用。

    估计有的同学说不对吧,类B都私有继承了类A了,怎么还能访问类A的protect成员呢?请看下面的例子。在类Pri_derv的f()成员函数里是可以方位父类Base的pub_mem();和prot_mem;的。

    class Base{
    public:
      void pub_mem();
    protected:
      int prot_mem;
    private:
      char pri_mem;
    };
    
    class Pub_derv : public Base{
      int f(){
        pub_mem();
        return prot_mem;
      }
      //char g(){return pri_mem;}//error
    };
    
    class Pri_derv : private Base{
      int f(){
        pub_mem();
        return prot_mem;
      }
    };
    
    

    所以,子类不管是以什么方式继承父类,父类的public成员和protected成员在子类里永远都是可以访问的。

    那么,public,protected,private继承都有什么用途呢?

    控制它的子类,或者使用它的类,可以访问哪些成员变量。

    • public继承:原来父类的public,protected,private成员在子类里保持不变。
    • protected继承:原来父类的public成员在子类里变成protected的了,其余不变,所以,当别的类使用这个子类, 或者另一个类继承这个子类时候,这个子类的父类的public就不能被访问了。
    • private继承:原来父类所以成员在子类里都变成private的了,所以,当别的类使用这个子类, 或者另一个类继承这个子类时候,这个子类的父类的public就不能被访问了。

    类Pri_derv私有继承Base,所以在Pri_derv的成员方法里是可以访问Base的public,protected成员的;但是Base的public,protected成员在类Pri_derv里已经是私有的了,所以当Pri_Pri_derv继承Pri_derv,在Pri_Pri_derv的成员方法里是不能再访问Base的public,protected成员。

    class Base{
    public:
      void pub_mem();
    protected:
      int prot_mem;
    private:
      char pri_mem;
    };
    
    class Pub_derv : public Base{
      int f(){
        pub_mem();
        return prot_mem;
      }
      //char g(){return pri_mem;}//error
    };
    
    class Pri_derv : private Base{
      int f(){
        pub_mem();
        return prot_mem;
      }
    };
    
    
    class Pub_Pub_derv : public Pub_derv{
      int f(){
        pub_mem();
        return prot_mem;
      }
      //char g(){return pri_mem;}//error
    };
    
    class Pri_Pri_derv : private Pri_derv{
      int f(){
        pub_mem();//error
        return prot_mem;//error
      }
    };
    
    

    c/c++ 学习互助QQ群:877684253

    本人微信:xiaoshitou5854

  • 相关阅读:
    开启休眠命令(用户找不到休眠复选框)
    小Q书桌(兼容win10)
    截图,仅截取活动窗口快捷键:Alt + Print Screen SysRq
    Windows10安装Dig命令工具
    拷贝文件保留原创建日期
    重装系统后,QQ(TIM)迁移聊天记录到指定位置
    完全拷贝命令
    Windows10/7 视频、图片、文档、音乐、收藏夹 等文件夹没有原始图标及中文名的解决方案
    js 判断日期大小、是否在时间范围内等处理
    Sql语句 表中相同的记录(某个字段)只显示一条,按照时间排序显示最大或最小
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/10199447.html
Copyright © 2011-2022 走看看