当前位置: 首页 > news >正文

C++中的公有继承,保护继承和私有继承说明

1. C++ 中的三种继承类型

在 C++ 里,继承可以指定访问权限修饰符:

class Derived : public Base { ... }   // 公有继承
class Derived : protected Base { ... } // 保护继承
class Derived : private Base { ... }   // 私有继承

它们的主要区别是 基类的成员在派生类中的可见性,以及派生类通过对象使用时的访问权限。


2. 基类到派生类的成员可见性变化

假设基类 Base 有三种成员:

  • public 公有成员
  • protected 受保护成员
  • private 私有成员
继承方式基类 public 在派生类中基类 protected 在派生类中基类 private 在派生类中
publicpublic → publicprotected → protected‑(不可访问)
protectedpublic → protectedprotected → protected‑(不可访问)
privatepublic → privateprotected → private‑(不可访问)

总结:

  • 公有继承:基类的接口保持原来的可见性(对外接口不会被屏蔽)。
  • 保护继承:基类的 public 接口变成 protected,对外不可直接用,只能在子类中用。
  • 私有继承:基类的所有访问权限全部变成 private,对外完全隐藏。

3. 对外表现的差异

公有继承

  • 语义上属于 “is-a” 关系:Derived 是一个 Base
  • 外部代码可以通过 Derived 对象直接使用基类的 public 方法。
  • 在 ROS 2 中,像 Node2Go : public rclcpp::Node 就意味着 Node2Go 是一个 ROS 节点,外部可以直接把它传给需要 rclcpp::Node 的地方。

保护继承

  • 表现出 “be-an-implementation-of” 的关系,更多是内部实现。
  • 外部无法通过派生类对象调用基类 public 方法(因为已变成 protected)。
  • 常用于封装,但保留派生类对基类方法的访问。

私有继承

  • 表现出 “is-implemented-in-terms-of” 的关系:派生类内部用基类功能实现,但对外隐藏。
  • 派生类对象不能在需要基类对象的地方直接用。
  • 类似于组合(“has-a”),只是用继承实现。

4. 为什么 ROS 2 节点类用 公有继承

  • ROS 2 的许多 API 需要接受 std::shared_ptr<rclcpp::Node> 或直接 rclcpp::Node 类型参数。
  • 如果是 public继承Node2Go 对象可以直接替代 rclcpp::Node
  • 保留 rclcpp::Node 提供的所有 public 方法,让你可以直接调用 create_publisher()create_subscription() 等。

一句话总结

  • public 继承:派生类“是”基类,对外公开基类接口。
  • protected 继承:派生类内部“是”基类,对外隐藏基类接口。
  • private 继承:派生类内部用基类实现功能,对外看起来“不是”基类,接口也全被隐藏。
http://www.dtcms.com/a/614299.html

相关文章:

  • c mvc网站开发在线平面图设计
  • 幻灯片在什么网站做杭州互联网大厂
  • 张懿暄出席中美电影节尽显东方魅力,Mrs Chen角色引期待
  • LeetCode 425 - 单词方块
  • 我要建设一个网站全国可信网站
  • Matlab速成笔记68:质数、质因数分解、阶乘、最大公约数、最小公倍数
  • [智能体设计模式] 第13章:人类参与环节(HITL)
  • 线代强化NO7|秩|矩阵的秩|向量组的秩|极大线性无关组|公式
  • 计算机网络安全--第三章-网络安全体系及管理
  • 11.15 脚本算法 加密网页
  • 前端CSS架构模式,BEM与ITCSS
  • 【深度学习】深度学习概念
  • 大连建设执业资格注册中心网站互联网项目推广
  • 源码交易网站源码怎么在网站做系统
  • 前端性能预算工具,控制资源大小
  • 海丰网站制作一个网站能放多少关键词
  • 计算机网络复习日报19
  • 【C++】10.用哈希表封装myunordered_map和myunordered_set
  • 黄陂建设网站做网站搞流量挂联盟广告变现
  • JSP Session
  • 鸿安建设集团网站百度免费建立网站
  • 【学习心得】conda打包进行环境迁移遇到conda包和pip包管理冲突问题
  • 做网站需要写配置文件吗教研网站建设方案
  • 51c视觉~合集52
  • 免费的虚拟现实开发教程,WebXR
  • linux下libcurl的https简单例子
  • 网站建立的意义建立网站可以赚钱吗?
  • 全连接层详解:从原理到应用的全面解析
  • Docker-Dockerfile 完全指南:编写最佳实践的镜像
  • 百度智能云建站广州地址设计网站