文档详情

6-继承与多态性.ppt

发布:2017-07-06约2.18千字共100页下载文档
文本预览下载声明
*;继承性和多态性;继承性和多态性; 新问题:如何扩展? 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)不允许
显示全部
相似文档