第8部分继承与派生.ppt
《第8部分继承与派生.ppt》由会员分享,可在线阅读,更多相关《第8部分继承与派生.ppt(26页珍藏版)》请在三一办公上搜索。
1、1,第8章 继承与派生,2,本章学习要求:,继承的概念 单继承多继承,3,8.1 继承与派生的概念,由于种种原因(如技术和资源等方面的限制),对已有软件不加修改地直接使用往往是很困难的。因为,已有软件的功能与新软件所需要的功能总是有差别的,如果要复用就必须解决这个差别。解决这个差别的一种途径是修改已有软件的源代码,这不仅需要读懂源代码,而且修改过程可能引入新的错误,花费大量的调试时间。继承机制是面向对象技术提供的另一种解决软件复用问题的途径。通过利用已有的类来定义新的类,即在定义一个新类时,先把一个或多个已有类的属性和功能全部包含进来,然后再给出新功能和属性的定义或对已有类的属性或功能重新定义
2、。,在继承关系中存在两个类:一个是已经存在的类,称为基类(或称父类);另一个是将要被创建的新类,称为派生类(或称子类)。派生类拥有基类的所有成员,并可以定义新的成员或对基类的一些成员进行重新定义,从而使派生类呈现与基类不同的特征。类之间的继承关系可表示为如图所示。,4,8.2 单继承,5,8.2.1 单继承的定义,在定义单继承时,派生类只能有一个直接父类,其定义如下:class:其中,为所新定义的派生类的名字,是派生类的直接基类的名字,继承方式可以是public(公有)、private(私有)和protected(保护),它用于影响基类成员到派生类后访问权限,继承方式可以省略,默认为priva
3、te。用于给出在派生类中新增的成员。如:,class Employeestring name;/姓名string offertel;/办公电话string dept;/部门string no;/工号double string sal;/基本工资double raiseSalary()/计算工资;,class Programmer:public Employee string specialty;/技术特长 void Programming();,6,8.2.2 继承方式以及派生类成员的访问,从基类继承的成员也可能会在两个地方被访问:在派生类内部,派生类新增的函数可能会访问从基类继承的成员。在派
4、生类的外部,通过派生类对象来访问从基类继承的成员。对从基类中继承的成员的访问,受到其在派生类中的访问控制方式的限制,而基类的成员在派生类中的访问权限由该成员在基类中的访问控制方式和派生类的继承方式共同决定的。继承方式在定义派生类时指出,如未指出,则默认为private。继承方式对基类成员在派生类中的访问控制方式的影响如表所示。,7,表 继承方式对基类成员在派生类中的访问控制方式的影响,8,基类成员被继承到派生类后,其访问控制方式决定于其在基类中的访问控制方式和继承方式,如表8-1所示。在派生类外只能访问在派生类中访问控制为public的基类成员。即基类的pubic成员被public方式继承到派
5、生类后,可以在派生类外部访问,其他都不可以。在派生类中自动拥有基类的所有成员,但并不是所有的从基类继承的成员都能够被派生类中新增的成员访问。派生类的新成员只能访问基类中的public和protected成员,与继承方式无关。,9,8.2.3 派生类对象的初始化和撤销,1派生类对象的初始化在派生类对象中包含一个匿名的基类对象,在创建和初始化派生类对象时,系统按照一定的顺序进行:先初始化该匿名的基类对象,然后再初始化派生类自己的新增成员。匿名基类对象的初始化由基类的构造函数来完成,派生类的构造函数会调用基类的构造函数来完成匿名基类对象的初始化,默认情况是调用基类无参数的构造函数,如果要调用其他带参
6、数的构造函数,则必须在派生类构造函数的成员初始化列表中指出。派生类构造函数的一般格式为:():(),().;,10,例 派生类对象的初始化。class parentpublic:parent(int i)x=i;prent()x=0;private:int x;class derived:public parentpublic:derived()/默认调用基类的无参数构造函数y=0;derived(int i)y=i;/默认调用基类的无参数构造函数/parent(a)调用基类的构造函数初始化匿名基类对象derived(int a,int b):parent(a),y(b)private:int
7、 y;int main()derived d1;/调用derived:derived()和parent:parent()derived d2(10);/调用derived:derived(int)和parent:parent()derived d3(10,20);/用derived:derived(int,int)和parent:parent(int),11,2派生类对象的撤销当派生类对象消亡时,析构的顺序与初始化顺序刚好相反:先调用该类的析构函数体中的代码,然后按照当初初始化时的相反顺序调用成员的析构函数,最后调用匿名基类对象的析构函数。在析构函数函数中,不需要显式调用成员对象以及基类的析构
8、函数,编译器会自动添加代码来调用。,12,3类的多级继承一个派生类也可以作为基类来派生出另一个新的类。如图8-5所示的类继承层次结构:A为基类,类B是类A的派生类,类C是类B的派生类,则类C也是类A的派生类。类B称为A的直接派生类,类C称为类A的间接派生类。类A是类B的直接基类,是类C的间接基类。,13,例多级继承的访问权限。实现右图中的ABC 多级继承关系 解:定义类层次结构中的类。class Apublic:void afun1()protected:void afun2();private:int a;class B:public Apublic:void bfun1()protecte
9、d:void bfun2()private:double b;class C:protected Bpublic:void cfun1()protected:void cfun2()private:char c;,14,8.3 多重继承,15,8.3.1 多重继承的定义,在定义多重继承的派生类时,需要给出两个或两个以上的直接基类,其格式为:class:,.,设有两个类A和B,定义如下:class Apublic:void fa();private:int m;float f;class Bpublic:void fb();private:int n;double d;,现在需要定义第三个类C,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 部分 继承 派生
链接地址:https://www.31ppt.com/p-5292877.html