(一三七)继承:is-a关系

简介:

C++有三种继承方式:

①公有继承;

②保护继承;

③私有继承。

 

 

公有继承是一种is-a关系(也可以理解为is-a-kind-of,一种,但is-a是术语)。任何可以对基类执行的操作,也可以对派生类执行。

 

 

1)公有继承不建立has-a关系,即一个类中包含另一个类。例如:

class Name
{....

}

class Student

{

Name name;

int id;

....

}

就是一种has-a关系,将Name对象作为Student类的数据成员。

 

2)公有继承不能建立is-like-a 关系。

不确定:这个关系貌似是指先有一个共同的类,然后以is-a关系或has-a关系,在这个共同的类的基础上定义的相关的两个/多个类。

继承可以在基类的基础上添加属性,但不能删除基类的属性。

 

3)公有继承不建立is-implemented-as-a(作为...来实现)关系。

例如,数组可以用于实现栈,但不能从数组类派生出栈类来,因为栈不是数组,且也可以通过其他方法来实现栈(如链表)。

不过不明白书上这一句:正确方法是,通过让栈包含一个私有Array对象成员来隐藏数组实现。——这句话意思是这种方法是用数组实现栈的方式么?强调说不能从数组派生出栈?我觉得是。

 

4)公有继承不建立uses-a关系。

例如A类和B类关系并不大(但有一点关系),然后从A类派生出B类,理论上是可以实现的,只不过这样A类很多数据成员、方法就没意义了。

 

 

C++中,可以使用公有继承来建立has-ais-implemented-as-auses-a关系,然而,这样做,按书上说法是会导致编程方面的问题,因此应使用is-a关系。

 

 

 

目录
相关文章
|
2月前
|
C++
52继承与组合
52继承与组合
9 0
|
8月前
2.【类的组合(在一个类中定义一个类)】
2.【类的组合(在一个类中定义一个类)】
16 0
|
9月前
|
Java
类之间的比较
类之间的比较
35 0
|
11月前
|
编译器 C语言 C++
C++ 之什么是类 & 对象的关系?
C++ 之什么是类 & 对象的关系?
|
设计模式 数据可视化 uml
【设计模式学习笔记】类图:类与类之间的关系
【设计模式学习笔记】类图:类与类之间的关系
209 0
【设计模式学习笔记】类图:类与类之间的关系
接口vs抽象类、继承vs组合,他们之间有啥关系
接口vs抽象类、继承vs组合,他们之间有啥关系
普通类,抽象类和接口之间的区别
普通类,抽象类和接口之间的区别
|
存储 Java
类与类的关系
## 继承关系 1.子类想要继承父类,通过extends关键字来实现 2.子类继承了父类,可以调用父类中(public protected)的属性和方法 2.1构造方法严格意义来说 不算做子类继承过来 只是单纯的在子类调用构造方法时默认调用父类的构造方法 2.2程序块严格意义来说 不算做子类继承过来(子类自己调用不到 没名字) 程序块子类不能直接调用 子类执行构造方法之前 默认调用了父类的构造方法 父类构造方法之前自动执行父类的块 3.子类除了能继承父类的属性和方法外,子类还可以添加自己独有的成员(属性 方法)
92 0
|
存储 Java 开发者
类和类之间的继承关系
## 前言: 你们是使用者(用户) 我是ArrayBox类型的一个具体的对象 想要存储椅子 你们把椅子直接交给我box 以前直接找到数组那个人 我就可以帮你们存起来啦 存储的时候你们自己找位置 至于我把椅子存在了哪里 长度够不够 都不用你们管 如果数组存满啦自己想办法 数组是一个开发者创建好的类型 数组是一个小容器 存储一组元素 添加元素 获取元素 删除元素
94 0
C++学习——继承与派生
C++学习——继承与派生
114 0
C++学习——继承与派生