第十二讲继承与派生.ppt
《第十二讲继承与派生.ppt》由会员分享,可在线阅读,更多相关《第十二讲继承与派生.ppt(49页珍藏版)》请在三一办公上搜索。
1、第十二讲 继承与派生,12.1 派生类12.2 其他特征的继承关系12.3 派生关系中的二义性处理12.4 多态性与虚函数,1.说明格式class:private:protected:public:;,12.1 派生类12.2 其他特征的继承关系12.3 派生关系中的二义性处理12.4 多态性与虚函数,12.1 派生类12.2 其他特征的继承关系12.3 派生关系中的二义性处理12.4 多态性与虚函数,基类说明表:列出所有基类。,每个基类的说明格式为:,派生方式分为:公有派生,关键字为public;保护派生,关键字为protected;私有派生,关键字为private;派生方式决定了从基类继承
2、来的成员在派生类中的属性。(P256.表8),12.1 派生类12.2 其他特征的继承关系12.3 派生关系中的二义性处理12.4 多态性与虚函数,针对继承与派生的关系,应注意:,一个类可以派生出多个派生类。,一个类可有一个或多个基类,分别称为单一继承和多重继承。,派生类又可有派生类,称为多级继承。,继承关系不可循环。,基类的友元关系、构造函数、析构函数都不能被派生类继承。,12.1 派生类12.2 其他特征的继承关系12.3 派生关系中的二义性处理12.4 多态性与虚函数,2.派生类的构造函数和析构函数,假设类A是类B的派生类,(1)类A对象的创建必然包含类B对象的创建。显然,类A对象也包含
3、类B对象的私有成员。,(2)类A对象的创建和释放和其基类对象及成员对象相联系。,12.1 派生类12.2 其他特征的继承关系12.3 派生关系中的二义性处理12.4 多态性与虚函数,派生类对象的初始化:需要对基类的数据成员、派生类自身所含对象成员的数据成员以及其它新增的数据成员同时进行初始化。,派生类构造函数的一般格式:():,12.1 派生类12.2 其他特征的继承关系12.3 派生关系中的二义性处理12.4 多态性与虚函数,初始化符表的格式:(),(),(),(),是与所指基类中某个构造函数的参数表。是与所属类中某个构造函数的参数表。,12.1 派生类12.2 其他特征的继承关系12.3
4、派生关系中的二义性处理12.4 多态性与虚函数,系统创建派生类对象的步骤:,(1)调用各基类的构造函数,调用顺序按照它们被继承时声明的顺序(从左至右)。,(2)如果派生类自身含有对象成员,就调用各对象成员的构造函数,调用顺序按照它们在派生类中声明时的顺序(从左至右)。,(3)调用派生类自身的构造函数。,12.1 派生类12.2 其他特征的继承关系12.3 派生关系中的二义性处理12.4 多态性与虚函数,系统释放派生类对象的步骤:,(1)调用派生类自身的析构函数。,(2)调用各对象成员的析构函数,调用顺序按照它们在派生类中声明时的相反顺序(从右至左)。,(3)调用各基类的析构函数,调用顺序按照它
5、们被继承时声明的相反顺序(从右至左)。,12.1 派生类12.2 其他特征的继承关系12.3 派生关系中的二义性处理12.4 多态性与虚函数,例1:派生类的简单实例Program 8-3.cpp(P.260),12.1 派生类12.2 其他特征的继承关系12.3 派生关系中的二义性处理12.4 多态性与虚函数,情况一:通过继承可使派生类A对象拥有基类B的对象。,情况二:通过类A中对象成员也可使类A对象拥有其它类B的对象。,两种情况之间的区别?,12.1 派生类12.2 其他特征的继承关系12.3 派生关系中的二义性处理12.4 多态性与虚函数,在情况一中,派生类A的对象必然是基类B的对象。类A
6、对象具有类B对象的一切特征;此外类A对象还具有类B没有的其它特征。(is a),在情况二中,成员对象(类B对象)是类A对象的组成部分。(has a),12.1 派生类12.2 其他特征的继承关系12.3 派生关系中的二义性处理12.4 多态性与虚函数,两点注意:,(1)注意构造函数和析构函数的执行次序。,(2)注意“组装”关系和继承关系不同决定的对象成员(或基类成员)访问方式以及对其对象可施加操作方面的不同。,12.1 派生类12.2 其他特征的继承关系12.3 派生关系中的二义性处理12.4 多态性与虚函数,(1)“继承”关系中的调用方式:,(2)“组装”关系中的调用方式:.,例2:对基类对
7、象(对象成员)中公有成员的调用方式,12.1 派生类12.2 其他特征的继承关系12.3 派生关系中的二义性处理12.4 多态性与虚函数,1.友元关系以及静态成员的继承,(2)当派生类从基类继承过来的成员原先是某类的友元,那么派生类的成员仍然是某类的友元。,友元关系的继承:,(1)当基类含有友元成员时,该基类的派生类不一定含有上述友元成员。,12.1 派生类12.2 其他特征的继承关系12.3 派生关系中的二义性处理12.4 多态性与虚函数,静态成员的继承:,(1)基类中位于公有段或者保护段的静态成员,在派生类中仍然是静态成员。,(2)静态成员的调用方式:,(3)无论创建多少某静态成员的对象,
8、都只有一份拷贝,为基类和派生类的所有对象共享。,12.1 派生类12.2 其他特征的继承关系12.3 派生关系中的二义性处理12.4 多态性与虚函数,2.派生类对象间赋值操作的原则,(1)如果派生类有自己的赋值运算符的重载定义,即按该重载函数处理。,(2)如果派生类未定义自己的赋值操作,而基类定义了赋值操作,则系统自动定义派生类赋值操作,其中基类成员的赋值按基类定义的赋值操作进行。,12.1 派生类12.2 其他特征的继承关系12.3 派生关系中的二义性处理12.4 多态性与虚函数,(3)如果派生类和基类都没有定义赋值操作,那么系统自动定义缺省赋值操作(按位拷贝)。,12.1 派生类12.2
9、其他特征的继承关系12.3 派生关系中的二义性处理12.4 多态性与虚函数,3.基类对象与派生类对象之间的赋 值关系,基类对象=派生类对象只是将派生类对象中“共性成员”赋值给基类对象。反方向赋值不允许。,(2)指向基类对象的指针=派生类对 象的地址通过上述指针可直接访问基类成员部分,但只有经过指针类型强制转换才可访问非基类成员部分。反方向赋值不允许。,12.1 派生类12.2 其他特征的继承关系12.3 派生关系中的二义性处理12.4 多态性与虚函数,4.上述赋值规定的依据,在派生类对象创建后,其在内存中的存储形式是先存其基类的成员,再存自身的各成员。因此,使用基类对象指针指向其派生类对象时,
10、同指向一个基类对象的效果相同。但不能保证基类对象指针对于派生类自有成员实例的访问或调用。,12.1 派生类12.2 其他特征的继承关系12.3 派生关系中的二义性处理12.4 多态性与虚函数,例3.赋值规定的简单示例 Program 8-4.(P.264),12.1 派生类12.2 其他特征的继承关系12.3 派生关系中的二义性处理12.4 多态性与虚函数,1.单一继承时基类与派生类间重名成员的处理,对派生类而言,不加类名限定时默认为是处理派生类成员,而要访问基类重名成员时,则必须通过类名限定。,12.1 派生类12.2 其他特征的继承关系12.3 派生关系中的二义性处理12.4 多态性与虚函
11、数,例4.单一继承时重名成员处理规定的简单示例 Program 8-5.cpp(P.266),12.1 派生类12.2 其他特征的继承关系12.3 派生关系中的二义性处理12.4 多态性与虚函数,2.多重继承时两基类间重名成员的处理,对派生类而言,不加类名限定时默认为是处理派生类成员,而要访问基类重名成员时,则必须通过类名限定。,12.1 派生类12.2 其他特征的继承关系12.3 派生关系中的二义性处理12.4 多态性与虚函数,3.多级继承时(非虚拟继承)包含两个基类实例情况的处理,多级混合继承情况下,若类CD从两条不同“路径”同时对类A进行了一般性继承(非虚拟继承)的话,则类D的对象中会同
12、时包含着两个类CA的实例。此时,对类CD而言,要通过类名限定来指定访问两个类CA实例中的哪一个。,类CD,类CB1,类CB2,类CA,12.1 派生类12.2 其他特征的继承关系12.3 派生关系中的二义性处理12.4 多态性与虚函数,上述各类之间的继承关系,class CAclass CB 1:public Aclass CB2:public Aclass CD:public CB1,public CB2,类CD对象的存储结构示意图,(CA)CB1)(CA)CB2)CD),12.1 派生类12.2 其他特征的继承关系12.3 派生关系中的二义性处理12.4 多态性与虚函数,例5.上述多级混合
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第十二 继承 派生

链接地址:https://www.31ppt.com/p-5329050.html