- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
6-继承与多态性
*;继承性和多态性;继承性和多态性;
新问题:如何扩展?
1)类的扩展:深大计算机与软件学院成立,为给计算机与软件学院学生创造好的学习环境,学校规定,软件学院新生可以在宿舍装电脑,如何修改宿舍管理系统?
2)类的抽象:不准养狗-不准养宠物
;
新问题:如何扩展?
3)此类问题的特点:类与类之间存在IS-A关系
软件学院新生也是一类新生,但其行为与一般的新生有所不同(更准确的说是有所扩展)
狗是宠物,猫是宠物,小强也是宠物——“宠物”概念的提出,可以使狗、猫、小强…等的一些共同性的行为被提取出来
;
1.继承及其重要性
1)自然界的继承
;
2)一个继承的关系(上图水果的继承关系)
苹果是一种水果(苹果继承了水果的共性行为);
国光苹果是一种苹果(国光苹果继承了苹果的共性行为);
??? 梨是一种水果;??? 雪梨是一种梨;
??? 蕉是一种水果;??? 香蕉是一种蕉;;3)“IS-A”关系:表示了一种继承关系。相当于,苹果是一种水果,梨是一种梨;苹果是一种水果:苹果具有水果共同有的特点,同时兼有苹果所特有的特点。
4)“HAS-A”关系:描述了一种聚集关系(组成关系) 。例如:水果由果皮、果肉、果核等组成。
;6)计算机应用中的实际问题
类的封装形式为用户提供了一种自定义数据类型。随着用户需求的变动,原来的数据类型可能无法满足用户的新要求;按照传统程序设计方法,就要改写(甚至重写)这些前面定义的数据类型。由于改写了数据类型,用户原来的程序就很可能无法使用。
;面向对象程序设计致力于解决此类问题。它提供“继承”这种机制,通过继承机制,可以方便地把这些原有程序进行改造,扩充,达到用户的新要求
用户不必直接修改(更不必重写)原有的程序,而是利用系统所提供的“继承”定义,使用原来定义的数据类型,方便地定义出新的数据类型。
这样,不仅能重用原来的程序,而且还能不断扩展新的程序,适应用户需求的变化。;*;*;C++继承形式主要有单重继承、多重继承等两种。如下图所示:;*;*;派生类定义举例 ;*;派生类分为两大部分: 一部分是从基类继承来的成员,另一部分是在声明派生类时增加的部分。
每一部分均分别包括数据成员和成员函数。;
;构造一个派生类包括以下3部分工作:
(1) 从基类接收成员。派生类把基类全部的成员(不包括构造函数和析构函数)接收过来,也就是说是没有选择的,不能选择接收其中一部分成员,而舍弃另一部分成员。
要求我们根据派生类的需要慎重选择基类,使冗余量最小。事实上,有些类是专门作为基类而设计的,在设计时充分考虑到派生类的要求。
(2) 调整从基类接收的成员。接收基类成员是程序人员不能选择的,但是程序人员可以对这些成员作某些调整。;(3) 在声明派生类时增加的成员。这部分内容是很重要的,它体现了派生类对基类功能的扩展。
此外,在声明派生类时,一般还应当自己定义派生类的构造函数和析构函数,因为构造函数和析构函数是不能从基类继承的。;既然派生类中包含基类成员和派生类自己增加的成员,就产生了这两部分成员的关系和访问属性的问题。
在建立派生类的时候,并不是简单地把基类的私有成员直接作为派生类的私有成员,把基类的公用成员直接作为派生类的公用成员。
对基类成员和派生类自己增加的成员是按不同的原则处理的。;(1) 基类的成员函数访问基类成员?
(2) 派生类的成员函数访问派生类自己增加的成员?
(3) 基类的成员函数访问派生类的成员?
(4) 派生类的成员函数访问基类的成员?
(5) 在派生类外访问派生类的成员?
(6) 在派生类外访问基类的成员?;继承成员的访问控制规则;类定义中的“访问控制”的含义;;公有继承;;;保护成员;保护继承;*;*;私有继承;*;*;*;*;*;派生类的构造函数 ;;;;;;;*;*;;*;*;练习;;赋值兼容原则;;;*;*;*;;多态性;多态性;*;*;*;什么是虚函数 ;*;*;*;;;虚析构函数
#includeiostream
using namespace std;
class A
{
public:
A(){cout“Constructing Aendl;}
virtual ~A(){coutDestructing Aendl;}
};
class B:public A
{
public:
B(){cout“Constructing Bendl;}
~B(){coutDestructing Bendl;}
};
;;*;*;*;;*;多重继承;*;*;多重继承派生类的构造函数;*;多重继承派生类的构造函数;多重继承派生类的析构函数;*;;;;C++关于重复继承的基本规则
(1)一个类必须完全定义后才可以作为基类--无法直接或间接让一个类继承自己(不能递归)
(2)不允许
文档评论(0)