很多同学到现在仍然对访问权限不是很清楚,或者比较模糊,有的同学记了又忘,忘了又记,所以今天想要借这篇文章给大家做一些总结,然后提供一个比较简便的方法去记C++中的访问权限。

众所周知,C++通过public,protected,private三个关键字来实现类成员(包括成员变量和成员方法)控制访问权限,下面为了便于大家记忆,我给访问权限的大小定义:public > protected > private > no access, 基于这个定义给出我总结的一个小诀窍,就是:遇升不升,遇降则降,遇平则平,私有除外。访问权限的插图如下:

为了方便大家理解,给出解释:
    1、当成员变量在父类中的访问权限为private时,不管采用哪种继承方式,在子类中的访问权限都变为no access,这叫私有除外。
    2、当成员变量在父类中的访问权限为protected时,继承方式为public时,子类中的访问权限为protected,这叫遇升不升,继承方式为protected时,子类中的访问权限仍为protected,这叫遇平则平,继承方式为private时,子类中的访问方式变为private,这叫遇降则降。
    3、当成员变量在父类中的访问权限为public时,继承方式为public时,子类中的访问权限为public,遇平则平;继承方式为protected时,子类中的访问权限为protected,遇降则降了吧,当继承方式为private时,子类中的访问权限为private,又遇降则降了吧。

通过上面的总结我们还发现,遇降则降,降幅总是个遇到的那个相同,比如public遇到了private时,访问权限就变为private,遇到protected时,就变为protected。
    明白了上面表格中的规律后,我们就可以很方便的运用这种访问权限机制来编写程序了,在此之前我们还要了解的是,一个类成员的访问权限确定后,又对应了两种情况,一种是在类内,一种是在类外。总结一下:
在类内部:只要不是no access,那么我们都可以访问该成员。也就是说类内部的访问权限比较松,凡是可访问的权限都能访问,不论是public、protected还是private。
在类外部:只要不是public,那么我们都不可以访问该成员。也就是说在类的外部访问权限比较严格,只要访问权限不是public的成员,在类外部都不能访问它。

明白了吗?
为了让大家再深刻的理解上面的总结,我还为大家设计了下面的小小的测试程序:希望用心的同学自己动手亲自测试一下:

class Animal    //父类
{
public:
      void eat(){
            cout<<"animal eat"<<endl;
      }
protected:
      void sleep(){
            cout<<"animal sleep"<<endl;
      }
private:
      void breathe(){
            cout<<"animal breathe"<<endl;
      }
};

class Fish:public Animal    //子类
{
public:
      void test(){
            eat();       //此时eat()的访问权限为public,在类内部能够访问
            sleep();     //此时sleep()的访问权限为protected,在类内部能够访问
            breathe();   //此时breathe()的访问权限为no access,在类内部不能够访问
      }
};

int main(void){
      Fish f;

f.eat();          //此时eat()的访问权限为public,在类外部能够访问
      f.sleep();        //此时sleep()的访问权限为protected,在类外部不能够访问
      f.breathe()       //此时breathe()的访问权限为no access,在类外部不能够访问
}

上面的代码肯定编译出错,希望大家把继承方式分别更改为protected和private都测试一下,这样你就什么都明白了。

C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制相关推荐

  1. c++ 私有内部类_C++类成员的访问权限以及类的封装

    "程序员大咖,一个分享编程知识的公众号.跟着站长一起学习,每天都有进步. 文章不涉及代码,不烧脑细胞,人人都可以学习. 当你决定关注「程序员大咖CodePush」,你已然超越了90%的程序员 ...

  2. 浅析C++中的is-a和has-a关系(公有继承、包含、私有继承)

    派生类和基类之间的特俗关系是基于C++继承的底层模型的. 总所周知,C++具有三种继承:公有继承.私有继承.保护继承. 最常见的就是公有继承,它建立一种is-a的关系. 如何理解is-a呢?即派生类对 ...

  3. 在继承中派生类成员的访问权限测试

    派生类对自身基类的private成员没有访问权限,对基类对象的protected成员没有访问权限,对派生类对象的(基类之外)的private和protected成员具有访问权限. 由于C++基础不好, ...

  4. C++的三种访问权限的继承

    C++的三种访问权限的继承 开发工具与关键技术:C++.VisualStudio 作者:何任贤 撰写时间:2019年05月20日 三种访问权限继承指的是,继承过来的成员函数和成员变量还有析构函数的访问 ...

  5. C++学习 十五、类继承(1)基类,派生类,访问权限,protected

    C++学习 十五.类继承(1)基类,派生类 前言 类继承 类的关系与继承 基类, 派生类 基类 派生类 构造函数,析构函数 文件位置 访问权限 protected 后记 前言 本篇开始学习C++类的继 ...

  6. 关于C++中公有继承、私有继承、保护继承的讨论

    一.文章来由 简单明了的理由,老生常谈但是没真正解决的问题,想搞清楚这个问题. 二.冗长的定义 我们先来看看这些冗长的定义: 公有继承: 当类的继承方式为公有继承时,基类的公有成员和保护成员的访问属性 ...

  7. C++公有继承,保护继承,私有继承的区别

    1.公有继承–public 公有继承时,对基类的公有成员和保护成员的访问属性不变,派生类的新增成员可以访问基类的公有成员和保护成员,但是访问不了基类的私有成员.派生类的对象只能访问派生类的公有成员(包 ...

  8. C++ 继承 | 对象切割、菱形继承、虚继承、对象组合

    文章目录 继承 继承的概念 继承方式及权限 using改变成员的访问权限 基类与派生类的赋值转换 回避虚函数机制 派生类的默认成员函数 友元与静态成员 多继承 菱形继承 虚继承 组合 继承 继承的概念 ...

  9. C++知识点47——类继承中的类型转换与访问权限控制(下)

    接上一篇文章https://blog.csdn.net/Master_Cui/article/details/109768311 五.派生类向基类转换的可访问性 当一个子类向基类转化时:有以下三条规则 ...

最新文章

  1. 再谈浏览器兼容性测试
  2. Python staticmethod() 函数
  3. 分享Kali Linux 2017年第12周镜像文件
  4. 马斯克说要开放自动驾驶和电池技术,上周被特斯拉起诉的公司已哭晕
  5. Python中浮点数精度处理
  6. CentOs6.5下安装vim7.4
  7. 【STM32】OLED简介
  8. 学习Asp.Net经常会用到的函数集
  9. 【算法分析与设计】寻找假币问题
  10. 好老婆的作息时间(做女人真悲哀 ……)
  11. phpmyadmin 导出mysql_PhpMyAdmin创建/导入/导出MySQL数据库教程[图文]
  12. 2018年全球智能手机销售收入增至5220亿美元 但销量却下降了
  13. C++STL笔记(五):Deque详解
  14. 我父亲的新发明--玉米点播器
  15. 苹果mac预览应用使用方法
  16. 电脑上的回收站无法清空
  17. 关于ios::sync_with_stdio(false);和cin.tie(0);cout.tie(0);
  18. 【渝粤教育】电大中专Office办公软件 (14)作业 题库
  19. android 手写签批_Android自定义实现手写签名功能
  20. 杭州 职称 计算机免试,明年杭州市评职称 年满50周岁以上才免考计算机

热门文章

  1. c语言字符串字节数函数,C语言字符,字符串,字节操作常用函数
  2. python 论文数据处理_用Python一次性把论文作图与数据处理全部搞定!
  3. H3C认证无线高级工程师
  4. Android之父深入解析Android
  5. python定义栈_Python栈实现
  6. 订单号生成的一些想法
  7. json串转成list
  8. SecureCRT密钥key远连接程ssh证书登录Linux
  9. java 异常 检查型和非检查型
  10. Element中 el-tag 点击事件 el-tag添加@click事件无效