c++ 继承,组合

1.什么是继承
A继承B,说明A是B的一种,并且B的所有行为对A都有意义
eg:A=WOMAN B=HUMAN
A=鸵鸟 B=鸟 (不行),因为鸟会飞,但是鸵鸟不会。
2.什么是组合
若在逻辑上A是B的“一部分”(a part of),则不允许B从A派生,而是要用A和其它东西组合出B。
例如眼(Eye)、鼻(Nose)、口(Mouth)、耳(Ear)是头(Head)的一部分,所以类Head应该由类Eye、Nose、Mouth、Ear组合而成,不是派生而成
3.继承的优点和缺点
 优点:
 容易进行新的实现,因为其大多数可继承而来。
 易于修改或扩展那些被复用的实现。
 缺点:
 破坏了封装性,因为这会将父类的实现细节暴露给子类。
“白盒”复用,因为父类的内部细节对于子类而言通常是可见的。
 当父类的实现更改时,子类也不得不会随之更改。
 从父类继承来的实现将不能在运行期间进行改变。
4.组合的优点和缺点
 优点:
 容器类仅能通过被包含对象的接口来对其进行访问。
“黑盒”复用,因为被包含对象的内部细节对外是不可见。
 封装性好。
 实现上的相互依赖性比较小。(被包含对象与容器对象之间的依赖关系比较少)
 每一个类只专注于一项任务。
 通过获取指向其它的具有相同类型的对象引用,可以在运行期间动态地定义(对象的)组合。
 缺点:
 导致系统中的对象过多。
 为了能将多个不同的对象作为组合块(composition block)来使用,必须仔细地对接口进行定义。
5.两者的选择
is-a关系用继承表达,has-a关系用组合表达
继承体现的是一种专门化的概念而组合则是一种组装的概念
另外确定是组合还是继承,最清楚的方法之一就是询问是否需要新类向上映射,也就是说当我们想重用原类型作为新类型的内部实现的话,我们最好自己组合,如果我们不仅想重用内部实现而且还想重用接口的话,那就用继承。
6.法则:优先使用(对象)组合,而非(类)继承

c++ 继承,组合,布布扣,bubuko.com

时间: 2024-10-10 03:47:52

c++ 继承,组合的相关文章

JavaScript-原型&原型链&原型继承&组合函数

小小的芝麻之旅: 今天学习了js的原型,要说原型,我们先简单说一下函数创建过程. 原型 每个函数在创建的时候js都自动添加了prototype属性,这就是函数的原型,原型就是函数的一个属性,类似一个指针.原型在函数的创建过程中由js编译器自动添加. <script type="text/javascript"> function Flower(name,area) { this.name=name; this.area=area; this.showName=myName;

python基础之继承组合应用、对象序列化和反序列化,选课系统综合示例

继承+组合应用示例 1 class Date: #定义时间类,包含姓名.年.月.日,用于返回生日 2 def __init__(self,name,year,mon,day): 3 self.name = name 4 self.year=year 5 self.mon=mon 6 self.day=day 7 def tell_birth(self): 8 print('%s:%s-%s-%s'%(self.name,self.year,self.mon,self.day)) 9 10 11

Python基础day-18[面向对象:继承,组合,接口归一化]

继承: 在Python3中默认继承object类.但凡是继承了object类以及子类的类称为新式类(Python3中全是这个).没有继承的称为经典类(在Python2中没有继承object以及他的子类都是经典类.) 继承是类与类的关系,解决了代码重用的问题,减少冗余代码.在Python中是先定义父类,然后在定义子类.最后使用 子类来实例化对象. "继承是一种什么是什么的关系.例如:下面的s1是obj的子类." #父类的定义:class obj: #定义一个obj类 pass class

对象继承——组合继承

组合继承,即组合构造函数继承和原型链继承方式,使用构造函数继承方式继承实例属性,即非共享属性:使用原型链继承方式继承共享的属性和方法. <script> /**父类型构造函数,定义实例属性**/ function SuperType(name) { /**必须添加this关键字,因为下面子类型继承是通过call方法,在子类型的作用范围调用父类构造函数的,如果不指定this *关键字,则不能被子类型继承,并且会报×× is not defined 的错误 **/ this.name = name

继承,组合

继承 什么是继承 继承是一种关系: 描述两个类之间 什么是什么的关系 例: 麦兜,佩奇,猪悟能 都是猪 在程序中,继承描述的是类与类之间的关系 例如:a继承了b,a就能直接舒勇b已经存在的属性方法 a称为子类,b称为父类(基类) 为什么要使用继承: 继承的一方(子类)可以直接使用被继承一方(父类)已经有的东西(属性和方法) 目的: 重用已有的代码,提高重用性 如何使用: 语法: class 类名称(父类1名称,父类2名称,...) 代码块 # python中,一个子类可以同时继承多个父类 例:

day23 组合(补充)和 继承

一.组合 #组合 #人 类 -- 武器类 #狗 类 #继承 #组合表现的是:谁有什么的关系 #人有武器 #学校有学生 #学生有课程 #circle from math import pi class Circle: def __init__(self,radius): self.radius = radius def perimeter(self): return 2 * pi * self.radius def area(self): return pi * self.radius **2 #

组合与继承有什么区别

组合和继承是面向对象中两种代码复用的方式.组合是指在新类里面创建原有类的对象,重复利用已有类的功能.继承是面向对象的主要特性之一,它允许设计人员根据其它类的实现来定义一个类的实现.组合和继承都允许在新的类中设置子对象(subobject),只是组合是显式的,而继承则是隐式的.组合和继承存在着对应关系:组合中的整体类和继承中的子类对应,组合中的局部类和继承中的父类对应. 二者的区别在哪里呢?首先分析一个实例.Car表示汽车对象,Vehicle表示交通工具对象,Tire表示轮胎对象.三者的类关系下图

javascript组合继承

javascript继承有几种继承方式,现在来说说其中的组合继承. 组合继承是结合了原型链和借用构造函数这两种技术的继承方式,分别利用它们的长处,避免了短处.那就先说说这两种技术吧. 原型链  原型链就是实例与原型之间的链条. 子类型构造函数   与  超类型构造函数  之间没有关联,只需将   子类型构造函数的原型  作为  超类型构造函数的实例.这样,子类型构造函数的实例   就可以共享    超类型构造函数原型的方法  以及  超类型构造函数的属性. 如: var subType.prot

JS继承之借用构造函数继承和组合继承

根据少一点套路,多一点真诚这个原则,继续学习. 借用构造函数继承 在解决原型中包含引用类型值所带来问题的过程中,开发人员开始使用一种叫做借用构造函数(constructor stealing)的技术(有时候也叫做伪造对象或经典继承).这种技术的基本思想相当简单,即在子类型构造函数的内部调用超类型构造函数. 基本模式 function SuperType(){ this.colors = ["red", "blue", "green"]; } fu