- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基类和派生类
第4章 继承 一、基类和派生类 二、派生类的构造函数和析构函数 三、多重继承 一、基类和派生类 继承是面向对象程序设计的基本特征之一,是支持代码重用的重要机制。 通过继承机制,在已有的类基础上建立新类。一个新类既可以共享另一个类的操作和数据,也可以在新类中定义已有类中没有的成员,这样就提供了无限重复利用程序资源的一种途径,大大的节省程序开发的时间和资源。 C++中继承是类之间定义的一种重要关系。 定义类B时,自动得到类A的操作和数据属性,只需定义类A中所没有的新成分就可完成在类B的定义,这样称类B继承了类A或类A派生了类B,这种机制称为继承。 A是基类,B是派生类。派生类可以具有基类的特性,共享基类的成员函数,使用基类的数据成员,还可以定义自己的数据成员和成员函数。 注意:在C++中下列成员不能继承: 构造函数和析构函数、友元关系、重载的new和delete运算符 在C++语言中,一个派生类可以从一个基类派生,也可以从多个基类派生。从一个基类派生的继承称为单继承;从多个基类派生的继承称为多继承。 ?继承使基类和派生类之间具有了层次关系。 1. 单继承派生类的定义 class 派生类名 :继承方式 基类名 { //派生类新定义成员 }; 其中,继承方式是三种继承方式:public,private或protected之一。 在派生类的头部明确列出其直接基类,间接基类则不用列出。 2.继承方式 基类的成员可以有public(公有)、protected(保护)和private(私有)三种访问属性,基类的自身成员函数可以对基类中任何一个其他成员进行访问,但是通过基类的对象,就只能访问该类的公有成员。 类的继承方式有public(公有继承)、protected(保护继承)和private(私有继承)三种,不同的继承方式,导致原来具有不同访问属性的基类成员在派生类中的访问属性也有所不同。 这里说的访问来自两个方面:一是派生类中的新增成员对从基类继承来的成员的访问;二是在派生类外部通过派生类的对象对从基类继承来的成员的访问。 (1)公有继承(public) 当类的继承方式为公有继承时,基类的公有和保护成员的访问属性在派生类中不变,而基类的私有成员不可访问, 即基类的公有成员和保护成员被继承到派生类中仍作为派生类的公有成员和保护成员,派生类的其他成员可以直接访问它们。 在派生类外部通过派生类的对象只能访问继承来的公有成员, 而无论是派生类的成员还是派生类的对象都无法访问基类的私有成员。 (2)私有继承(private) 当类的继承方式为私有继承时,基类中的公有成员和保护成员都以私有成员身份出现在派生类中,而基类的私有成员在派生类中不可访问。 也就是说基类的公有成员和保护成员被继承后作为派生类的私有成员,派生类的其他成员可以直接访问它们,但是在类外部通过派生类的对象无法访问。 无论是派生类的成员还是通过派生类的对象,都无法访问基类的私有成员。 经过私有继承之后,所有基类的成员都成为了派生类的私有成员或不可访问的成员,如果进一步派生的话,基类的全部成员就无法在新的派生类中被访问。因此,私有继承之后,基类的成员再也无法在以后的派生类中发挥作用,实际是相当于中止了基类功能的继续派生,出于这种原因,一般情况下私有继承的使用比较少。 (3)保护继承(protected) 保护继承中,基类的公有和保护成员都以保护成员的身份出现在派生类中,而基类的私有成员不可访问。 这样,派生类的其他成员就可以直接访问它们,但在类外部通过派生类的对象无法访问它们。 无论是派生类的成员还是派生类的对象,都无法访问基类的私有成员。 比较私有继承和保护继承,可以看出在直接派生类中,对所继承成员的访问是完全相同的 。 但是,如果派生类作为新的基类继续派生时,二者的就有区别。 派生类实际包含的成员可以按访问权限划分为四种: 公有成员:是由派生类新声明的或基类的公有成员经公有派生而来的。 保护成员:可以是由派生类新声明的成员、基类的保护成员公有派生的或基类的公有成员和保护成员经保护派生而来的。 私有成员:是由派生类新声明的或基类的公有和保护成员经私有派生而来的。 类中不可直接访问的成员:是由基类的私有成员派生而来的。 3.在派生类中重定义基类的函数 派生类自动继承了基类中定义的数据成员和成员函数。如果派生类认为基类中某个成员函数的实现不能满足需要,可以在派生类中重新定义该函数。 重定义基类的成员函数需要使用和该函数相同的函数名和参数列表,如果参数列表不同,就是函数重载而不是函数的重定义了。 经过重定义之后,派生类定义的函数取代了基类中原来的函数定义,也就是说,通过派生类对象访问到的该成员函数是在派生类中重新定义的版本,基类中定义的版本不能通过派生类对象访问。 如果派生类的
文档评论(0)