c++的继承是如何工作的 public、private、protected继承详解【OOP核心】


C++继承通过public、protected、private三种方式控制基类成员在派生类内外的访问权限:public继承保持原访问级别并支持is-a关系;protected继承将基类public/protected成员降为protected,限制外部访问;private继承全转为private,仅用于实现复用,不建立类型关系。

继承是C++面向对象编程的核心机制,它决定了基类成员在派生类中的可访问性以及对外的可见性。关键不在于“能不能用”,而在于“谁能看到、谁能调用、谁能继承”。public、private、protected 继承的本质,是控制基类成员在派生类内部和派生类外部(包括进一步的派生类)的访问权限边界。

public 继承:最常用,“是”关系的自然表达

这是最符合“is-a”语义的继承方式。派生类对象可以被当作基类对象使用(支持向上转型),基类的 public 成员在派生类中仍为 public,protected 成员仍为 protected,private 成员不可访问(但依然存在)。

  • 派生类内部:可访问基类的 public 和 protected 成员;不能访问 private 成员
  • 派生类对象在外部:只能调用其 public 成员(包括从基类继承来的 public 成员)
  • 进一步派生:若 C 继承自 B(public),B 继承自 A(public),则 C 能访问 A 的 public/protected 成员,且 C 的对象可隐式转为 A*

protected 继承:限制对外暴露,“内部可用,外部不可见”

基类的所有 public 和 protected 成员,在派生类中都变成 protected;private 成员依然不可访问。这意味着:派生类自己能用这些成员,但派生类的对象在外部无法直接调用它们,而且后续派生类也只能以 protected 方式继续继承(不能再变回 public)。

  • 派生类内部:可访问原基类的 public 和 protected 成员(现在都是 protected)
  • 派生类对象在外部:不能通过对象或指针调用任何从基类继承来的接口(因为它们已不是 public)
  • 进一步派生:子类只能访问这些成员,但无法再将它们开放给更外层——切断了“is-a”的公共接口链

private 继承:实现复用而非抽象,“用到了,但不是它”

基类所有 public 和 protected 成员在派生类中全部变为 private。这本质上是一种“组合+私有实现复用”的替代写法,强调“我用了你的代码,但我跟你的类型无关”。不支持向上转型,也不体现 is-a 关系。

  • 派生类内部:可访问原基类的 public/protected 成员(现在是 private)
  • 派生类对象在外部:完全不可见基类接口;不能转为基类指针/引用
  • 进一步派生:子类无法访问这些成员(因为它们在直接父类中已是 private)
  • 适用场景:当只想复用基类的实现逻辑,又不想暴露其接口或建立类型关系时(现代 C++ 更倾向用组合代替 private 继承)

访问权限与继承方式的交叉影响(关键细节)

一个成员能否被访问,取决于两个因素:它在基类中的原始访问限定符(public/protected/private),以及继承方式(public/protected/private)。例如:

  • 基类中 protected 成员 + public 继承 → 派生类中仍是 protected
  • 基类中 public 成员 + protected 继承 → 派生类中变为 protected
  • 基类中 public 成员 + private 继承 → 派生类中变为 private
  • 无论哪种继承方式,基类的 private 成员在派生类中都不可访问(但占用对象内存)

记住:继承方式不改变基类 private 成员的不可访问性,只调整 public/protected 成员在派生类作用域中的新访问级别。


# c++  # 面向对象编程  # 作用域  # 面向对象  # 父类  # 子类  # 类作用域  # 指针  # 继承  # 接口  # public  # private  # protected  # 对象  # 派生类  # 类中  # 谁能  # 复用  # 访问权限  # 中都  # 仍为  # 都是  # 这是 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: Win11怎么关闭防火墙通知_屏蔽Win11安全中心安全警告弹窗【技巧】  Python文件操作优化_大文件与流处理解析【教程】  如何在 PHP 单元测试中正确模拟带方法的图像处理门面(Facade)  Python函数接口文档化_自动化说明【指导】  php485返回数据不完整怎么办_php485数据分包重组处理方法【教程】  LINUX怎么查看进程_LINUX ps命令查看运行服务  Win11局域网共享怎么设置 Win11文件夹网络共享教程【详解】  MAC怎么一键隐藏桌面所有图标_MAC极简模式切换与终端指令【方法】  Win11怎么制作U盘启动盘_Win11原版系统安装盘制作【详解】  c++中如何使用auto关键字_c++11类型推导用法说明  Win11如何连接Xbox手柄 Win11蓝牙连接游戏手柄教程【步骤】  Windows10蓝屏代码DPC_WATCHDOG_VIOLATION_Win10死机修复指南  c++如何使用std::bind绑定函数参数_c++ 占位符std::placeholders使用【详解】  如何用正则与预处理高效拦截带干扰符的恶意域名  如何解决同一段404代码在不同主机上表现不一致的问题  Python异步网络编程_aiohttp说明【指导】  C++如何编写函数模板?(泛型编程入门)  Win10 BitLocker加密教程 Win10给磁盘驱动器上锁【安全】  Win11怎么修复系统文件_使用sfc命令修复Win11系统【技巧】  如何在 Python 中将 ISO 8601 时间戳转换为日期并计算日期差值  LINUX如何开放防火墙端口_Linux firewalld与iptables开放端口命令【安全配置】  Python大文件处理策略_内存优化说明【指导】  Mac怎么查看活动监视器_理解Mac进程和资源占用【指南】  如何在Golang中处理数据库事务错误_回滚和日志记录  Win11时间格式怎么改成12小时制 Win11时间格式切换教程【步骤】  Win11触摸板没反应怎么办_开启Win11笔记本触摸板手势教程【步骤】  Windows10怎么卸载预装软件_Windows10预装软件卸载步骤【教程】  Linux怎么实现内网穿透_Linux安装Frp客户端与服务端配置【方法】  获取 PHP 文件最后修改时间的正确方法  php接口返回数据乱码怎么办_php接口调试编码问题解决【指南】  Win11如何设置系统语言_Win11系统语言切换教程【攻略】  MAC怎么截图并快速编辑_MAC自带截图快捷键与标注工具使用【方法】  Win11怎么关闭用户账户控制UAC_Windows11更改通知设置等级  PythonPandas数据分析项目教程_时间序列透视表应用  c++ namespace命名空间用法_c++避免命名冲突  如何在 Go 应用中实现自动错误恢复与进程重启机制  Win11如何设置系统声音_Win11系统声音调整教程【攻略】  如何用::实现单例模式_php静态方法与作用域操作符应用【技巧】  Win11如何设置计划任务 Win11定时执行程序教程【详解】  php485在php5.6下能用吗_php485旧版本兼容性问题说明【详解】  Bpmn 2.0的XML文件怎么画流程图  如何使用Golang捕获并记录协程panic_保证主程序稳定运行  如何用正则与预处理结合精准拦截拼接式垃圾域名  如何使用Golang优化模块引入路径_Golanggo mod tidy清理与优化方法  Win11任务栏怎么固定应用 Win11将软件图标固定到底部【步骤】  mac怎么打开终端_MAC终端Terminal使用入门与常用命令【教程】  How to Properly Use NumPy in VS Code  Win11声音太小怎么办_Windows 11开启响度均衡增强音量【技巧】  c++ atoi和atof函数用法_c++字符数组转数字  php怎么操作Redis_Redis扩展连接与基本命令使用方法【方法】 

 2025-12-20

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.