【C++】继承 ④ ( 继承对访问控制权限的影响 | 访问权限判定 | 继承不包括构造与析构函数 | 继承改变成员访问权限 )
  K1I6GvxBEuyy 2023年11月02日 55 0



文章目录

  • 一、继承相关概念
  • 1、继承不包括构造与析构函数
  • 2、继承改变成员访问权限
  • 二、访问控制权限回顾
  • 1、访问权限
  • 2、代码示例 - 访问权限
  • 三、继承对访问控制权限的影响
  • 1、访问权限判定
  • 2、公有继承
  • 3、保护继承
  • 4、私有继承







一、继承相关概念




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、访问权限判定



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

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

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


2、公有继承



公有继承 :

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


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

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


3、保护继承



保护继承 :

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


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

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


4、私有继承



私有继承 :

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


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

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


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  8Tw5Riv1mGFK   2024年05月01日   80   0   0 C++
  BYaHC1OPAeY4   2024年05月08日   57   0   0 C++
  yZdUbUDB8h5t   2024年05月05日   43   0   0 C++
  oXKBKZoQY2lx   2024年05月17日   58   0   0 C++
K1I6GvxBEuyy
作者其他文章 更多