欢迎来到天天文库
浏览记录
ID:40238212
大小:584.00 KB
页数:76页
时间:2019-07-28
《C++程序设计 冯博琴 C++第8章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第8章类的继承中国铁道出版社18.1继承和派生8.1.1继承和派生的概念在已有类基础上产生新类的过程,称为派生已有的类称为基类或父类,新类称为派生类或子类,新类同样也可以作为基类再派生出新的类,从而形成了类的层次结构。2利用继承性在已有类的基础上产生新类时,就可以只定义新类特有的性质,而其它与原有类相同的性质只要继承下来即可,不需要重新定义基类与派生类之间的关系:(1)基类是对派生类的抽象,派生类是对基类的具体化(2)派生类是基类的组合,多继承可以看作是多个单继承的简单组合。(3)公有派生类的对象可以作为基类的对象处理3两种不同的继承方式派生类从一个直接基类继承称为单继承,从多个直接基
2、类的继承称为多继承48.1.2单继承的定义单继承中,每个类只能有一个直接基类派生类的定义格式:class派生类名:继承方式基类名{派生类中新定义的成员};“继承方式”用于指定派生类的访问控制方式,分别是公有继承、私有继承和保护继承,默认的是私有继承。派生类中新定义的成员是对基类的扩充和发展。这样,一个派生类中的成员由两部分组成,一部分是从基类继承得到的,除了构造函数和析构函数之外的所有成员,它构成了派生类成员中基类部分,另一部分是新定义的成员。5【例8-1】类的继承#includeusingnamespacestd;classPoint{private:intX,Y
3、;public:voidSetX(intx){X=x;}voidSetY(inty){Y=y;}voidShowXY(){cout<<"X="<4、SetX(1);c.SetY(3);c.SetR(5.0);c.ShowXY();c.Show();cout<<"area="<5、承中派生类的定义格式:class派生类名:继承方式1基类名1,继承方式2基类名2,……{派生类中新定义的成员};10多继承示例classA{……};classB{……};classC:publicA,privateB{……};类C中的成员由3部分组成,分别是从基类A中继承的成员、从基类B中继承的成员以及类C中自身定义的成员。118.2派生类对基类的继承方式派生类继承了基类所有数据成员和除构造函数、析构函数之外的所有函数成员,这些成员的访问属性在不同的继承方式下发生了改变。不同继承方式下的访问属性,要区分清楚是派生类的新增函数成员对基类成员的访问还是派生类的对象对基类成员的访问,它们的访6、问权限是不完全相同的。128.2.1公有继承在公有继承中,基类中成员的访问属性在派生类中保持不变:(1)派生类的其它成员函数和派生类的对象都可以访问来自基类的公有成员;(2)派生类的其它成员可以访问来自基类的保护成员,而派生类的对象则不能访问基类的保护成员;(3)不论是派生类新定义的成员函数还是派生类的对象都不可以访问来自基类的私有成员。138.2.2私有继承私有继承中,基类中的公有成员和保护成员在派生类中以私有成员身份出现:(1)如果这个派生类作为基类再派生出其它类时,它以私有方式继承的公有成员和保护成员不能被它的派生类所访问;(2)派生类的其它成员可以访问来自基类的公有成员和保护成7、员,派生类的对象不能访问基类的公有成员和保护成员;(3)不论是派生类新定义的其它成员还是派生类的对象都不可以访问来自基类的私有成员。经过私有继承,基类的所有公有成员和保护成员在派生类中成为私有成员,而基类的私有成员在派生类中成为不可访问成员。148.2.3保护继承在保护继承中,基类中的保护成员在派生类中的身份不变,仍然是保护成员,基类的公有成员则以保护成员的身份出现在派生类中:(1)派生类的其它成员函数可以访问来自基类的公有成员和保护成员,而派
4、SetX(1);c.SetY(3);c.SetR(5.0);c.ShowXY();c.Show();cout<<"area="<5、承中派生类的定义格式:class派生类名:继承方式1基类名1,继承方式2基类名2,……{派生类中新定义的成员};10多继承示例classA{……};classB{……};classC:publicA,privateB{……};类C中的成员由3部分组成,分别是从基类A中继承的成员、从基类B中继承的成员以及类C中自身定义的成员。118.2派生类对基类的继承方式派生类继承了基类所有数据成员和除构造函数、析构函数之外的所有函数成员,这些成员的访问属性在不同的继承方式下发生了改变。不同继承方式下的访问属性,要区分清楚是派生类的新增函数成员对基类成员的访问还是派生类的对象对基类成员的访问,它们的访6、问权限是不完全相同的。128.2.1公有继承在公有继承中,基类中成员的访问属性在派生类中保持不变:(1)派生类的其它成员函数和派生类的对象都可以访问来自基类的公有成员;(2)派生类的其它成员可以访问来自基类的保护成员,而派生类的对象则不能访问基类的保护成员;(3)不论是派生类新定义的成员函数还是派生类的对象都不可以访问来自基类的私有成员。138.2.2私有继承私有继承中,基类中的公有成员和保护成员在派生类中以私有成员身份出现:(1)如果这个派生类作为基类再派生出其它类时,它以私有方式继承的公有成员和保护成员不能被它的派生类所访问;(2)派生类的其它成员可以访问来自基类的公有成员和保护成7、员,派生类的对象不能访问基类的公有成员和保护成员;(3)不论是派生类新定义的其它成员还是派生类的对象都不可以访问来自基类的私有成员。经过私有继承,基类的所有公有成员和保护成员在派生类中成为私有成员,而基类的私有成员在派生类中成为不可访问成员。148.2.3保护继承在保护继承中,基类中的保护成员在派生类中的身份不变,仍然是保护成员,基类的公有成员则以保护成员的身份出现在派生类中:(1)派生类的其它成员函数可以访问来自基类的公有成员和保护成员,而派
5、承中派生类的定义格式:class派生类名:继承方式1基类名1,继承方式2基类名2,……{派生类中新定义的成员};10多继承示例classA{……};classB{……};classC:publicA,privateB{……};类C中的成员由3部分组成,分别是从基类A中继承的成员、从基类B中继承的成员以及类C中自身定义的成员。118.2派生类对基类的继承方式派生类继承了基类所有数据成员和除构造函数、析构函数之外的所有函数成员,这些成员的访问属性在不同的继承方式下发生了改变。不同继承方式下的访问属性,要区分清楚是派生类的新增函数成员对基类成员的访问还是派生类的对象对基类成员的访问,它们的访
6、问权限是不完全相同的。128.2.1公有继承在公有继承中,基类中成员的访问属性在派生类中保持不变:(1)派生类的其它成员函数和派生类的对象都可以访问来自基类的公有成员;(2)派生类的其它成员可以访问来自基类的保护成员,而派生类的对象则不能访问基类的保护成员;(3)不论是派生类新定义的成员函数还是派生类的对象都不可以访问来自基类的私有成员。138.2.2私有继承私有继承中,基类中的公有成员和保护成员在派生类中以私有成员身份出现:(1)如果这个派生类作为基类再派生出其它类时,它以私有方式继承的公有成员和保护成员不能被它的派生类所访问;(2)派生类的其它成员可以访问来自基类的公有成员和保护成
7、员,派生类的对象不能访问基类的公有成员和保护成员;(3)不论是派生类新定义的其它成员还是派生类的对象都不可以访问来自基类的私有成员。经过私有继承,基类的所有公有成员和保护成员在派生类中成为私有成员,而基类的私有成员在派生类中成为不可访问成员。148.2.3保护继承在保护继承中,基类中的保护成员在派生类中的身份不变,仍然是保护成员,基类的公有成员则以保护成员的身份出现在派生类中:(1)派生类的其它成员函数可以访问来自基类的公有成员和保护成员,而派
此文档下载收益归作者所有