1、何谓is-a关系?

比如说两个类A和B,假如B公开继承自A,那么就意味着:B一定属于类A,但是A却不一定属于B。一个简单的例子,假如A是塑模的是人,而B塑模的是学生。那么一般来讲:学生一定属于人,人却不一定属于学生。

2、编程时,is-a关系可能是违背由现实生活得来的经验直觉的

例子1:企鹅与鸟
现实生活中的经验:企鹅是一种鸟,但是编程时却不能将二者塑模成is-a 关系。

因为一般而言鸟都是会飞的,所以我们很自然的在鸟类中会写一个成员方法:飞行。
但是,企鹅会飞吗?显然不会,那么企鹅是一种鸟,但是企鹅却不会飞,这就会导致如果将二者塑模成is-a 关系时出现问题。

可以采取的做法:在鸟基类中不写:飞行这种行为。继承自会飞的鸟的类中写上飞行方法。

例子2:正方形与矩形
现实生活中的经验:正方形是一种矩形,但是编程时却不能将二者塑模成is-a 关系。

因为对于矩形来说,有一种行为,即:可以只改变高度,而不改变宽度。但是,对于正方形来说,只要改变了高度或者宽度中的任意一个,另外一个就应该被改变,否则它不再属于正方形。于是,一种可以作用于矩形的行为,却不能作用于正方形。因此,不能将二者塑模成is-a关系。

总之,如果将两个类A、B,想要塑模成公共继承关系,B继承自A:那就必须做到A的所有行为都可以作用在B上。这才是能够塑模成is-a关系的关键。

条款32:确定你的public继承塑模出is-a关系相关推荐

  1. 条款32、确定你的public继承塑模出is-a关系

    bublic继承意味着"is-a"关系.即一个D类对象(Derived)同时也是一个B类对象(Base).D is-a B.反之则不成立.B相比D更一般化,而D相对B更特殊化. 考 ...

  2. [Effective C++ --032]确定你的public继承塑模出is-a

    这一章都在讲述继承的关系.可以举个例子说明: 父类是水果,子类是苹果,苹果是一种(is-a)水果,但是水果不一定就是苹果. is-a并不是唯一存在classes之间的关系.另两个常见的关系是has-a ...

  3. 32:确定你的public继承塑膜出is-a关系

    "继承"可以是单一继承或多重继承,每一个继承连接可以是public,protected或private,也可以是virtual或non-virtual.然后是成员函数的各个选项:v ...

  4. 【Effection C++】读书笔记 条款32~条款33

    [Effection C++]继承与面向对象设计 条款32:确定你的public继承塑模出is-a关系 "public 继承"意味着"is a".适用于base ...

  5. C++编程进阶6(public继承与组合、private继承、多重继承、处理模板基类内的名称、如何避免模板代码膨胀)

    二十一.public继承与组合 public继承是是子类对象is a基类对象的关系,比如QT中的所有组件类都要继承QObject,所以所有的QT组件都是一个QObject. 而组合是has a(包含) ...

  6. java看不起c语言,为什么我感觉Java比C语言难呢?总觉得逻辑上没有C语言好理解。比如各种继承介面。包之间的关系。...

    为什么我感觉Java比C语言难呢?总觉得逻辑上没有C语言好理解.比如各种继承介面.包之间的关系.以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我 ...

  7. 很有趣的问题,Public继承和默认的集成

    #include <iostream.h> #include <stdio.h> class A{ private: int i; public: //int i; f(){ ...

  8. C++继承详解:共有(public)继承,私有(private)继承,保护(protected)继承

    转自:http://www.cnblogs.com/qlwy/archive/2011/08/25/2153584.html C++继承:公有,私有,保护 公有继承(public).私有继承(priv ...

  9. protect 继承_C++继承详解:共有(public)继承,私有(private)继承,保护(protected)继承...

    公有继承(public).私有继承(private).保护继承(protected)是常用的三种继承方式. 1. 公有继承(public) 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时, ...

最新文章

  1. Finding the Edges (Sobel Operator)
  2. 网络架构之争:三大主流架构对决,谁是王者?深入思考CNN、Transformer与MLP
  3. 谈谈选用技术的原则,技术学习方法技巧,阅读代码的技巧及其它 MSF的一点心得...
  4. Android开发之ConstraintLayout(约束布局)一个控件位于一个控件右上角类似RelativeLayout实现效果
  5. Android之BaseAdapter—convertView回收机制与动态控件响应
  6. linux定时器王贤才,《linux内核设计与实现》 学习笔记(十七)---设备和模块
  7. Java中的输入、输出流
  8. 巨佬就是巨佬,乔布斯 1973 年求职申请表,拍出22万美元高价!
  9. ML-Agents案例之金字塔
  10. android 清理后自动重启,解决Android后台清理APP后,程序自动重启的问题
  11. 新概念英语(第四册,旧版)复习(原文及全文翻译)——Lesson 58 - Hobbies(培养一种爱好)
  12. BMapGL实现地图轨迹运动(地图视角不变)
  13. 数值图形处理软件活图简介
  14. Testin云测试以AI自动化技术打造业内领先的兼容测试服务平台
  15. IPSEC VPN动态配置(示例)
  16. 如何放大图片不模糊?教你一招
  17. 【python系列】使用mayavi画3d散点图
  18. 鱼眼摄像头 实时动、静目标的检测,跟踪,分类
  19. Mysql insert 多种使用方式(insert into/insert ignore /replace into/on deplicate key update)
  20. 为什么互联网人不说“人话”?

热门文章

  1. tp1900芯片对比7621a_貌似很多人看不起MTK,其实MTK7621A已经很给力了。
  2. golang srpint和itoa对比
  3. 澄海口袋机器人_汕头澄海三名11岁小学生发明功夫茶机器人
  4. C++中typename用法
  5. 40个改变编程技能的小技巧
  6. pythonpandas筛选_Python+pandas执行Excel筛选编辑功能
  7. 使用python读写VOC2007形式存放的xml标签文件
  8. 移动应用开发——基于uni-app框架
  9. 清除缓存后IDEA启动报错Failed to create JVM.JVM Path:****。Error luanching IDEA
  10. 系统项目质量管理计划