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

【Effective C++】39 明智而审慎地使用private继承

在之前论证过c++如何将public 继承视为 is-a 关系。在哪个例子里,class Student 以 public 形式继承class Person, 于是编译器在必要时刻将Students暗自转化为Person.如果此时我们以 private 继承替换 public继承。

class Person {...};
class Student: private Person {...}; // 改用private继承void eat(const Person& p);
voide study(const Student& s);Person p; 	// P是人
Student s;  // s是学生
eat(p);		// 没问题,p是人,会吃
eat(s);		// 错误!

显然private 继承并不意味着 is-a 关系,那意味着什么?在这之前我们需要明确 private 继承的意义。

  • 如果class 之间的继承关系是 private, 编译器不会自动将一个 derived class 对象 转换成 基类对象。这和 public 继承的情况不同,这也就是为什么通过 s调用 eat 会失败的原因。
  • 由private base class 继承而来的所有成员,在derived class 中都会变成private 属性,纵使他们在base class 原本是protected 或public 属性。

现在可以讨论其显示意义。Private继承意味着 implemented-in-terms-of(根据某物实现出)。如果你让class D 以 private形式继承class B, 你的用意是为了采用 class B 内已经备妥的某些特性,不是因为B 对象和D对象存在有任何观念上的关系。

额,没有明白 private 的实际意义,等用到再说吧。。。。。。

http://www.lryc.cn/news/323025.html

相关文章:

  • 2024年卫生巾行业市场分析报告(京东天猫淘宝线上卫生巾品类电商数据查询)
  • MySQL之表的记录操作
  • 一种动态联动的实现方法
  • kotlin中使用ViewBinding绑定控件
  • 知识积累(五):Transformer 家族的学习笔记
  • [Java、Android面试]_13_map、set和list的区别
  • Linux进程管理:(六)SMP负载均衡
  • 计算机专业学生的成长之路:超越课堂的自我提升策略
  • 财报解读:“高端化”告一段落,华住开始“全球化”?
  • Wifi环境下Unity开发iOS应用启动后HTTPS请求未弹出是否允许无线数据使用数据的弹窗
  • 数据结构的概念大合集03(栈)
  • C++ 哈希表
  • C++之继承详解
  • C#装箱和拆箱
  • 企业用大模型如何更具「效价比」?百度智能云发布5款大模型新品
  • linux 外部GPIO Watchdog驱动适配
  • 活动回顾 | 走进华为向深问路,交流数智办公新体验
  • 【Java】Oracle发布Java22最新版本
  • Vue reactive函数的使用
  • unity自动引用生成
  • 【Linux系统】线程互斥与同步
  • 武汉星起航引领跨境电商新潮流,深耕亚马逊打造全方位合作新模式
  • GateWay路由规则
  • shell脚本基础改造
  • 静态综合实验
  • Spring Web MVC入门(6)
  • muduo异步日志
  • 在智慧能源的发展历程中,哪些技术的出现起到了关键性的作用?
  • SQLiteC/C++接口详细介绍sqlite3_stmt类(十三)
  • 扫雷(蓝桥杯,acwing)