c++基础:继承与组合!
C++程序开发中,设计孤立的类比较容易,设计相互关联的类却比较难,这其中会涉及到两个概念,一个是继承(Inheritance),一个是组合。因为二者有一定的相似性,往往令程序员混淆不清。类的组合和继承一样,是软件重用的重要方式。组合和继承都是有效地利用已有类的资源。但二者的概念和用法不同。
一、如果类A 和类B 毫不相关,不可以为了使B 的功能更多些而让B 继承A 的功能。
不要觉得“不吃白不吃”,让一个好端端的健壮青年无缘无故地吃人参补身体。
二、如果类B 有必要使用A 的功能,则要分两种情况考虑:
(1)若在逻辑上B 是A 的“一种”(a kind of ),则允许B 继承A 的功能。如男人(Man)是人(Human)的一种,男孩(Boy)是男人的一种。那么类Man 可以从类Human 派生,类Boy 可以从类Man 派生。示例程序如下:
(2)若在逻辑上A 是B 的“一部分”(a part of),则不允许B 继承A 的功能,而是要用A和其它东西组合出B。例如眼(Eye)、鼻(Nose)、口(Mouth)、耳(Ear)是头(Head)的一部分,所以类Head 应该由类Eye、Nose、Mouth、Ear 组合而成,不是派生而成。示例程序如下:
上述程序十分简短并且运行正确,但是这种设计却是错误的。这就开头所说的很多程序员经不起“继承”的诱惑而犯下设计错误。
附:
何为组合:
比如有两个类A、B,C类由A.B继承而来,
下面就是组合模式,有点像零件的拼装
class A{//...};class B{//...};class C{A a;B b;};
免费领取C++资料包
c++基础:继承与组合!相关推荐
- python基础——继承与派生、组合
python基础--继承与派生 1 什么是继承: 继承是一种创建新的类的方式,在python中,新建的类可以继承自一个或者多个父类,原始类成为基类或超累,新建的类成为派生类或子类 1.1 继承分为:单 ...
- C++ 面向对象(一)继承:继承、对象切割、菱形继承、虚继承、继承与组合
目录 继承 继承的概念 继承方式 基类与派生类的赋值转换 作用域与隐藏 派生类的默认成员函数 友元与静态成员 友元 静态成员 多继承 菱形继承 虚继承 继承和组合 什么是组合 如何选择组合和继承 继承 ...
- C++ 继承与组合的区别
C++ 程序开发中,设计孤立的类比较容易,设计相互关联的类却比较难,这其中会涉及两个概念,一个是继承(Inheritance),一个是组合(Composition).因为二者有一定的相似性,往往令程序 ...
- Python 类的继承和组合
面向对象的编程带来的主要好处之一是代码的复用,实现这种复用的方法之一是通过继承机制. python中解决代码复用的方式:继承和组合. 1 什么是继承 继承是一种创建类的方法,在python中,一个类可 ...
- 【Java SE】继承;组合;向上转型;动态绑定;方法重写;静态绑定;多态;抽象类;接口;
面向对象编程 文章目录 1. 包 1.1 导入包中的类 1.2 静态导入 1.3 将类放到包中 1.4 包的访问权限控制 1.5 常见的系统包 2. 继承 2.1 语法规则 2.2 protected ...
- C++编程进阶6(public继承与组合、private继承、多重继承、处理模板基类内的名称、如何避免模板代码膨胀)
二十一.public继承与组合 public继承是是子类对象is a基类对象的关系,比如QT中的所有组件类都要继承QObject,所以所有的QT组件都是一个QObject. 而组合是has a(包含) ...
- pythond的执行原理_python基础——继承实现的原理
python基础--继承实现的原理 1 继承顺序 class A(object): def test(self): print('from A') class B(A): def test(self) ...
- Bash基础(2) 通配符 组合键 数据重定向 管道 tee
Bash基础(2) 通配符 组合键 数据重定向 管道 tee命令 1 文本名"通配符" *:匹配任意长度的任意字符: ?:匹配任意单个字符: []: 匹配指定范围内 ...
- java 继承 模型_java – 画布形状模型的继承与组合?
对于以下模型,您更喜欢继承还是组合: >我想在画布上绘制对象,每个对象代表一个数据对象 >将其视为状态机图:椭圆表示状态,线表示它们之间的连接/转换.对象表示本身永远不会改变,即状态将始终 ...
- 详细分析如何在java代码中使用继承和组合
文章目录 继承与组合 何时在Java中使用继承 何时在Java中使用组合 继承与组成:两个例子 用Java继承重写方法 Java不具有多重继承 使用super访问父类方法 构造函数与继承一起使用 类型 ...
最新文章
- MyBatis01 Idea中搭建MyBatis开发环境
- linux网络编程一:主机字节序与网络字节序的的判断
- Linux 网络 IO 模型
- C语言实现的ABCI
- python下常用OpenCV代码
- 通过QuartzCore/CoreAnimation.h实现让玫瑰花飞舞
- android R编译OTA时报“ExternalError: Invalid ro.product.property_source_order”解决方法
- php线程安全和非线程安全_安全调用线程的步骤
- Spark:通过start-slaves.sh脚本启动worker报错:Permission denied
- distpicker实现省市级联动
- 浅谈未来计算机操作系统的发展方向,浅谈未来计算机操作系统的发展方向
- 信息安全专业学习建议
- ImportError: _C.cpython-36m-x86_64-linux-gnu.so: undefined symbol: _ZN2at4_ops6narrow4callERKNS_6Ten
- c语言求球的体积用const,牛客练习赛41 E.球的体积并(计算几何)
- 安卓端身份证识别与云端服务器识别
- 后端好书阅读与推荐(续四)
- java 求两个list 集合的交集,重复的元素
- Matplotlib保存图片到文件
- apollo github的说明介绍
- JMeter - 如何测试REST API / 微服务