C++中protected访问权限问题

2023-11-19

今天发现有这样两句话:
1. 基类的保护成员对于派生类的成员是可访问的。
2. 派生类的成员只能通过派生类对象访问基类的保护成员,派生类对一个基类对象中的受保护成员没有访问权限。

这两句话看的太头晕了,其实作者应该是想表达:只有在派生类中才可以通过派生类对象访问基类的protected成员。看这样的代码:

class Base
{
public:
    Base();
private:
    void foo();
protected:
    int m;
};
class Derive : public Base
{
public:
    Derive();
};
Derive::Derive()
{
    this->m = 1;  // 这里访问m没有问题
}

使用类的代码:

Derive *d = new Derive();
std::cout<< d->m <<endl;  // 这里就报错了

总结一下三个关键字的访问范围:
public: 能被类成员函数、子类函数、友元访问,也能被类的对象访问。
private: 只能被类成员函数及友元访问,不能被其他任何访问,本身的类对象也不行。
protected: 只能被类成员函数、子类函数及友元访问,不能被其他任何访问,本身的类对象也不行。

还是上面的两个类,只看public和private,如下代码:

    Base *b = new Base();
    b->test_pub();  // 通过
    b->foo();   // 报错
    std::cout<< b->m;   // 报错

protected继承和private继承能降低访问权限:

使用private继承,父类的protected和public属性在子类中变为private
使用protected继承,父类的protected和public属性在子类中变为protected
使用public继承,父类中的protected和public属性不发生改变

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++中protected访问权限问题 的相关文章

随机推荐

  • 软件自动化测试对软件产品起到什么作用?有什么注意事项?

    自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程 通常 在设计了测试用例并通过评审之后 由测试人员根据测试用例中描述的规程一步步执行测试 得到实际结果与期望结果的比较 一 软件自动化测试的作用 1 提高测试效率 自动化测试可以大幅
  • 小记MAC安装GIT

    MAC安装GIT教程 0 安装方式说明 MAC安装软件的时候 有一个很好用的工具 叫 homebrew 大家可以试一下 我这里采用下载安装包的方式进行 1 下载git 我这里就暂且选择git最新版本 2 36 1 正常情况下 我们一般不选择
  • 经典的笔试题解析《高质量C/C++编程》

    对于 高质量C C 编程 想必这个已经是早已成名的经典书籍了 在此 笔者借用两三个题目 解析下面代码 错误示列 请勿模仿 正确的代码 在后面部分 include
  • 快排 + 二分

    一直觉得快排跟二分很像 大家也都有很多变种 在此整理一下 快排的特点是 需要一个pivort 让左边比他大 右边比他小 反之亦然 每次排序都有一个数的位置被确定 两种写法其实是一种 经典partition写在一个函数里 class Solu
  • Flutter BottomNavigationBar组件(底部导航栏)

    Flutter BottomNavigationBar 组件 BottomNavigationBar 常见的属性 属性名 说明 items List 底部导航条按钮集合 页面集合 iconSize icon currentIndex 默认选
  • 单相逆变器第二课、DC/AC电路基础理论学习

    这周是真心忙 到现在才把DC AC单相部分的理论知识看完 但由于是第一次接触电力电子 写的不好的地方 大家轻喷 DC AC变换电路成为逆变 也就是直流电压 电流 向交流电压 电流 变化 先来看下电压型逆变器 电压型逆变器主要有三类 电阻负载
  • 90 后学霸博士 8 年进击战:用机器学习为化工研究叠 BUFF

    本文首发自微信公众号 HyperAI超神经 内容一览 ScienceAI 作为近两年的技术热点 引起了业界广泛关注和讨论 本文将围绕 ScienceAdvances 的一篇论文 介绍如何利用机器学习 对燃煤电厂的胺排放量进行预测 关键词 A
  • 简短的 mouseover 显示与隐藏层的办法

    简短的 mouseover 显示与隐藏层的办法 在制作 mouseover 和 mouseout 显示 隐藏层的时候 有时总会出现 mouseover 层里面的对象时 层消失的情况 这是因为mouseover 层内 对象时 会对前层产生两个
  • 从零开始学习OpenWrt完美教程

    Cisco Linksys在2003年发布了WRT54G这款无线路由器 同年有人发现它的IOS是基于Linux的 然而Linux是基于GPL许可证发布的 按照该许可证Cisco应该把WRT54G 的IOS的源代码公开 2003年3月 Cis
  • ASP.NET Core项目无法使用命令行执行ef命令

    在项目目录下 打开命令行窗口 执行dotnet ef help 提示以下信息 报错信息 无法执行 因为找不到指定的命令或文件 可能的原因包括 你拼错了内置的 dotnet 命令 你打算执行 NET Core 程序 但 dotnet ef 不
  • mv:重命名和移动文件、文件夹

    在Linux中 mv命令可以用于重命名和移动文件 也可以用于重命名和移动文件夹 注意 如果目标目录已经存在同名的文件或文件夹 mv命令将覆盖目标文件或合并目标文件夹 请注意 在使用mv命令时要小心 确保提供正确的文件名和路径 以免误操作造成
  • 这样的程序员年薪可以达到多少呢?

    转载于 https www cnblogs com Rainbow890722 p 10456640 html
  • 美媒体称谷歌卫星技术可实时定位全球军舰

    5月17日 美国 AOL防务 网站刊登文章 称谷歌公司将推出一款新软件 可让用户对任何一艘海上船只进行实时追踪定位并了解水深数据 包括美海军军舰 做了美军做不到的事 据悉 谷歌公司耗资数百万美元发展能够精确定位船只方位并搜集水深数据的卫星技
  • Redis 跳跃表

    跳跃表 跳跃表基础知识 跳跃表 网易公开课 gt 跳跃表 总结 效率堪比各种平衡树结构 如红黑树 B树 B 树 实现起来简单 仅用到链表的知识 基于概率论 有个随机过程 但表现不错
  • 神经网络优化(损失函数:自定义损失函数、交叉熵、softmax())

    参考 神经网络优化 损失函数 自定义损失函数 交叉熵 softmax 云 社区 腾讯云 1 前向传播 搭建网络结构 反向传播 训练网络参数 2 激活函数 提高了模型的表达里 使模型更具有表达力 3 神经网络的层数 通常用神经网络的层数和神经
  • 区块链应用技术学习(一)

    众所周知 区块链技术的特性就在于其去中心化与不可篡改性 由于这俩点的特性的存在 使得区块链技术的发展颇有看头 于是小编我也踏上了区块链学习的过程 文章目录 前言 一 区块链是什么 二 区块链作用 1 企业 2 个人 总结 前言 在学习区块链
  • Android资源管理中的SharedLibrary和Dynamic Reference-------之资源共享库(一)

    一 引言 共享库的概念 相信大家都有所了解 它有有许多优点 可以设想 在一个系统上要跑100个应用 并且它们都使用到了同一个库 如果这个库做成静态库 那么每个应用中都要打包一次这个库 100个应用就是100次 这无疑是重复的 我们可不可以在
  • FIFO读写控制

    如果在两个模块之间传输数据 两个模块之间的处理速率不同 会导致采集数据的遗漏或错误 在他们之间加一个数据缓存器 所有数据先经过缓存器缓存 再输入数据接送模块 创建两个模块 一个 作为发送模块 一个作为接受模块 发送模块检测到 fifo为空开
  • Python3,2行代码,多种方法,直接把网页内容转换成PDF文档和图片。

    网页转换成PDF 1 引言 2 代码实战 2 1 模块介绍 2 1 1 pdfkit 2 2 安装 2 3 代码实例 2 3 1 URL 对应网页转 PDF 2 3 2 HTML 文件转 PDF 2 3 3 字符串转 PDF 2 4 拓展
  • C++中protected访问权限问题

    今天发现有这样两句话 1 基类的保护成员对于派生类的成员是可访问的 2 派生类的成员只能通过派生类对象访问基类的保护成员 派生类对一个基类对象中的受保护成员没有访问权限 这两句话看的太头晕了 其实作者应该是想表达 只有在派生类中才可以通过派