- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
chapter4类和对象的继承
第四章 继承性(inheritance)与类的派生(derivation)
4.1 派生类(derived class)及其对象(object)
4.1.1 定义
第三章中提到,在面向对象程序设计语言中,“类”是一组具有相同数据结构(属性)和相同操作(方法、函数)的集合,是一系列具有相同性质的对象的抽象内容,它描述的不是个别对象而是全体对象的共同特征。“类”是具有相同共性的各事物的集合,是这些事物的统一抽象内容。
C++中,“类”被表达为一个具有特定功能的程序块,它提供代码共享(代码重用性),以便用户可以方便地建立所需要的任何数据类型。
但一个“类”(基类)无法包含这些事物的全部共性,而只包含主要共性。为包含其它次要共性,可通过继承机制定义、建立其它类(称为派生类)。
继承(inheritance)是C++面向对象程序设计的重要特性之一。所谓继承,是建立一个新的类(即直接派生类),从一个或多个已经定义的类(称为直接基类)中继承一部分或全部函数和数据,同时还能重新定义或增加新的数据和函数。
继承机制在对象之间建立了派生关系,从而建立类的层次或等级(hierarchy of classes)。
引入继承机制的目的是实现代码可重用性(reusability):一方面可以重新使用先前定义的代码,避免不必要的重复设计;另一方面,如果原代码不能完全满足要求,可以在绝不改变原有代码的情况下,补充新的代码,增加新的功能。
请见下图:
上图中,“几何图形”是基类,它包含了几何图形的一些基本共性。它的派生类“三角形”、“四边形”和“圆形”各自包含了本图形的一些次要共性。例如计算面积的表达式,这三个图形都不相同。而“四边形”又可派生出“正方形”、“平行四边形”和“矩形”,从而使它们各自具有不同的具体属性。
具体说,例如,先有一个用于测量温度的类(第三章有过类似例子):
class temp
{
static double temp; //数据:温度
double ref; //数据:温度变量temp的引用
double meas ( ); //函数:用于测量温度
}
过些时候,需要增加控制水温的功能,设计一个新类:
class temp_water
{
static double temp; //原有数据:水温
double ref; //原有数据:水温变量temp的引用
char *err_msg ; //数据:断水警告
double meas ( ); //原有函数:用于测量水温
void act_water( ); //函数:采取动作,开启水阀
void regulate( ); //函数:调节水阀开启度,以便控制水量和水温
}
随后可将字符指针char *err_msg初始化为指向字符串“No cooling water”。
可以看出,这两个类的内容有不少重复(重复部分已用下划线标出)。为避免重复,可设计新类为能够继承前一个类的全部或一部分内容。
可以将前一个类class temp定义为基类(base class),而新类则称为派生类(derived class),如下:
class temp_water : temp
{
char *err_msg ; //数据:断水警告
void act_water( ); //函数:采取动作,开启水阀
void regulate( ); //函数:调节水阀开启度,以便控制水量和水温
};
派生类定义的格式是其类首加上冒号(:)和基类名称(temp)。
这个派生出的新类具有以下特点(主要是前两点):
1.派生类是基类定义的延续 --- 在派生类中可隐含地具有基类的任何成员(部分或全部)。
2.派生类是基类定义的扩充 --- 在派生类中可重新定义新的成员(在第五章中还将看到,可在派生类中改变或扩充基类成员函数的功能)。
3.派生类可以是基类的组合 --- 派生类可由多个基类派生而来,此时派生类是所有基类的属性和行为的组合(请见本章§4.3“多继承” )。
这称为“可重用(可复用reusable)的软件构件”。
其中基类称base class(也称父类ancester class),派生类称derived class(也称子类sub-class)。
继承:从一个或多个先前定义过的类(称为直接基类)中接受全部或一部分数据(属性)或/和函数(行为、操作),并且重新定义原有成员并补充定义新的成员,因而形成一个新的低层的类(称为直接派生类)。而该派生类又可用作更低层派生类的直接基类。
这样就建立了类的层次(hierarchy of classes)
可用有向无环图(Directed Acyclic Grap
原创力文档


文档评论(0)