• 【C++】继承 ④ ( 继承对访问控制权限的影响 | 访问权限判定 | 继承不包括构造与析构函数 | 继承改变成员访问权限 )






    一、继承相关概念




    1、继承不包括构造与析构函数


    子类 继承 父类 的 所有成员 , 包括 成员变量 和 成员方法 ;

    子类 不会 继承 父类 的 构造函数 和 析构函数 ;


    2、继承改变成员访问权限


    父类 的 成员变量 和 成员方法 的 访问属性 , 在 子类 中 是可以调整的 ;

    • 如 : private , protected , public 访问属性 , 在 子类中 可以发生改变 ;




    二、访问控制权限回顾




    1、访问权限


    访问控制权限 :

    • 公有成员 public : 公有成员可以被任何对象访问 , 包括类的外部和所有从该类派生的子类 ;
      • 完全开放 : 如果一个成员被声明为公有 , 那么它可以在任何地方被访问 , 就像公共场所一样 ;
    • 保护成员 protected : 保护成员可以被该类和所有派生子类访问 , 但不能被类的外部访问 ;
      • 半开放 : 只有 在类内部 和 派生类 的成员可以访问它 ;
    • 私有成员 private : 私有成员 只能被该类的成员函数访问 , 包括友元函数和派生类中的覆盖函数 ;
      • 完全封闭 : 在 类的外部 和 子类 中都不能访问私有成员 ;
      • private 是最安全的访问控制级别 , 任何试图直接访问私有成员的代码都会导致编译错误 ;

    2、代码示例 - 访问权限


    代码示例 :

    class MyClass {
    public:
        // 公有成员  
        // 可以在任何位置访问
        // 类内部 , 子类 , 类外部 都可以访问
        int public_member;
    
    protected:
        // 保护成员
        // 可以在类内部 , 子类 访问
        // 类外部 不可以访问
        int protected_member;
    
    private:
        // 私有成员  
        // 只能在 类内部 访问
        // 子类 , 类外部 不可以访问
        int private_member;
    
    public:
        // 针对共有成员变量的访问函数可以不写
        void set_public_member(int value) {
            public_member = value;
        }
    
        int get_public_member() {
            return public_member;
        }
    
        // 保护变量 在外部只能通过共有的成员函数进行访问
    
        void set_protected_member(int value) {
            protected_member = value;
        }
    
        int get_protected_member() {
            return protected_member;
        }
    
        // 私有变量只能通过共有的成员函数进行访问
    
        void set_private_member(int value) {
            private_member = value;
        }
    
        int get_private_member() {
            return private_member;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49




    三、继承对访问控制权限的影响




    1、访问权限判定


    C++ 的 继承方式 对 子类的 成员变量 和 成员方法 会造成影响 ,

    成员的访问属性 需要看根据下面的逻辑进行判定 :

    • 调用位置 : 看是在哪调用的 , 在 类内部 , 派生类 ( 子类 ) , 还是在 类外部 ;
    • 子类继承方式 :
      • 公有继承 : public
      • 保护继承 : protected
      • 私有继承 : private
    • 父类中的访问级别 :
      • 公有成员 : public
      • 保护成员 : protected
      • 私有成员 : private

    2、公有继承


    公有继承 :

    • 使用 public 关键字继承 ;
    // 子类 公有继承 父类
    class Child : public Parent
    
    • 1
    • 2
    • 父类成员 在 子类 中 , 访问控制权限 不变 ;

    父类中的访问控制权限 如下变化 :

    • 父类中的 public 成员 仍然是 public 成员 ;
    • 父类中的 protected 成员 仍然是 protected 成员 ;
    • 父类中的 private 成员 仍然是 private 成员 ;

    3、保护继承


    保护继承 :

    • 使用 protected 关键字继承 ;
    // 子类 保护继承 父类
    class Child : protected Parent
    
    • 1
    • 2
    • 父类成员 在 子类 中 , 公有成员 和 保护成员 变为 保护成员 ;

    父类中的访问控制权限 如下变化 :

    • 父类中的 public 成员 变成 protected 成员 ;
    • 父类中的 protected 成员 仍然是 protected 成员 ;
    • 父类中的 private 成员 仍然是 private 成员 ;

    4、私有继承


    私有继承 :

    • 使用 private 关键字继承 ;
    // 子类 私有继承 父类
    class Child : private Parent
    
    • 1
    • 2
    • 父类成员 在 子类 中 , 公有成员 和 保护成员 变为 私有成员 ;

    父类中的访问控制权限 如下变化 :

    • 父类中的 public 成员 变成 private 成员 ;
    • 父类中的 protected 成员 变成 private 成员 ;
    • 父类中的 private 成员 仍然是 private 成员 ;
  • 相关阅读:
    求后缀表达式的值
    Oracle对临时表空间管理
    2023年最新版Apollo保姆级使用手册(超级详尽版本)
    Kylin服务器版本桌面版本在接串口日志时出现问题的排查方向
    幂级数求和难吗?细节很重要
    Cadence orcad 批量设置原理图标题栏
    存储器和CPU的连接与TCP的流量控制
    学生成绩查询(查最大值,最小值,平均值,升序,降序)
    【代码精读】optee的进入和退出的方式
    【Element-plus】如何让滚动条永远在最底部(支持在线演示)
  • 原文地址:https://blog.csdn.net/han1202012/article/details/133800816