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

来源:互联网 发布:mac电脑开机密码设置 编辑:程序博客网 时间:2024/04/28 21:11

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关系。

 

 

 

0 0
原创粉丝点击