教学内容:.ppt
《教学内容:.ppt》由会员分享,可在线阅读,更多相关《教学内容:.ppt(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、12 继承与派生类,2,教学内容:,12.1 继承的概念12.2 派生类 12.3 二义性问题 12.4 赋值兼容规则,3,能通过继承已有的类建立新类 掌握继承的三种方式:公有、保护、私有继承掌握派生类和基类的概念;掌握派生类的构造函数和析构函数;理解多重继承和虚基类,教学要求:,4,12.1 继承的概念,继承是面向对象程序设计的基本特征之一,它允许在原类的基础上创建新类,新类即可从一个或多个原类中继承(共享)其函数和数据,也可以重新定义原类中没有的数据和函数。故通过类的“继承”,可将原来的程序代码重复使用,从而减少了程序代码的冗余度,提高了编程的效率。,类的继承是新类从已有类那里得到已有的特
2、性。从已有类产生新类的过程就是类的派生。在继承过程中,原类称为基类或父类,而由类派生的新类则称为派生类或子类。派生新类的过程包括吸收基类的成员、调整基类成员和添加新的成员三步。,5,据派生类所拥有的基类数目不同,可以分为:单继承:一个类只有一个直接基类时,称为单继承多继承:一个类同时有多个直接基类时,则称为多继承基类与派生类之间的关系如下: 基类是对派生类的抽象,派生类是对基类的具体化 派生类是基类的组合。多继承可看作是多个单继承的简 单组合。 新类也可作为基类再派生新类,且一个基类可同时派生出 多个派生类。基类的基类甚至更高层的基类称为间接基类 派生类可对一些继承来的函数重新定义,以适应新的
3、要求 派生类包含了它所有基类中除构造和析构函数之外的所有成员。,6,12.2 派生类,派生类的定义格式:,class 派生类名:继承方式 基类名1,继承方式 基类名n 派生类新成员声明; /与前面声明一个类时完全相同 ;,例: 假设基类Base1,Base2是已声明的类,声明一个名为Dr1的 派生类,该类从基类Base1,Base2派生而来:,class Dr1:public Base1,private Base2 派生类新成员声明; ;,继承方式:指定了派生类成员以及类外对象对于从基类 继承来的成员的访问权限。有三种继承方式: public:表示公有继承; private:表示私有继承,是默
4、认方式; protected:表示保护继承。,7,下表是不同继承方式的基类在派生类中的访问权限,8,从上表可以看出:,公有继承时:基类成员的访问权限在派生类中不变。于是派 生类的其他成员可以直接访问继承来的公有和 保护成员。其他外部使用者只能通过派生类的 对象访问继承来的公有成员,保护继承时:基类成员的访问权限在派生类中全变为保护的 访问方式。于是派生类的其他成员可直接访 问从基类继承来的公有和保护成员,但在类外 部通过派生类的对象无法访问它们,9,私有继承时:基类成员的访问权限在派生类中全变为私有的访 问方式 基类中私有成员在派生类中是隐藏的,只能在基类内部访问。 派生类中的成员不能访问基类
5、中的私有成员,可以访问基类 中的公有成员和保护成员 派生类中用“类名 : 成员”访问基类成员 若派生类定义了与基类同名的成员,若要在派生类中使用基 类同名成员,可用:类名 : 成员 派生类对基类的静态成员的访问用:类名 : 成员,10,派生类的构造函数:,派生类的数据成员由所有基类的数据成员与派生类新增的数据成员共同组成,如果派生类新增成员中包括其他类的对象(子对象),派生类的数据成员中实际上还间接包括了这些对象的数据成员。因此,构造派生类的对象时,必须对基类数据成员、新增数据成员和成员对象的数据成员进行初始化。派生类的构造函数必须要以合适的初值作为参数,隐含调用基类和新增对象成员的构造函数,
6、来初始化它们各自的数据成员,然后再加入新的语句对新增普通数据成员进行初始化。,11,派生类构造函数的一般格式如下:,派生类构造函数执行的一般次序如下: 1)调用基类构造函数,调用顺序按照它们在定义派生类中声 明的顺序; 2)调用内嵌成员对象的构造函数,其调用顺序同上3)派生类的构造函数体中的内容,派生类名:派生类名(参数总表):基类名1(参数表1), 基类名n(参数表n) 子对象名1:(子对象参数表1),子对象名m(子对象参数表m) 派生类新增成员的初始化语句; ,12, 若基类中定义了缺省构造函数或根本没有定义任何一个 构造函数(此时,由编译器自动生成缺省构造函数)时, 在派生类构造函数的定
7、义中可以省略对该基类构造函数的 调用。子对象的情况也一样。 若所有基类和子对象的构造函数都不需要参数且派生类 也不需要参数时,派生类构造函数可以不定义。 若所有基类和子对象的构造函数都可省略时,可以省略 派生类构造函数的定义若基类的构造函数定义了一个或多个参数时,派生类必 须定义构造函数,注意:,13,每个派生类只需负责其直接基类的构造对基类成员和子对象成员的初始化必须在成员初始化列表 中进行,新增成员的初始化既可以在成员初始化列表中进 行,也可以在构造函数体中进行。,14,例:派生类构造函数举例,#include class B1/基类B1,构造函数有参数 public: B1(int i)
8、 coutconstructing B1 iendl; ; class B2/基类B2,构造函数有参数 public: B2(int j)coutconstructing B2 jendl; ; class B3 /基类B3,构造函数无参数 public: B3( ) coutconstructing B3 *endl; ;,15,class C:public B2,public B1,public B3 /派生新类C,注意基类名的顺序 public: /派生类的公有成员 C(int a,int b,int c,int d):B1(a),memberB2(d),memberB1(c),B2(b
9、) /注意基类名的个数与顺序及成员对象名的个数与顺序 private: /派生类的私有对象成员 B1 memberB1; B2 memberB2; B3 memberB3; ; void main( ) C obj(1,2,3,4); ,程序运行结果是: constructing B2 2constructing B1 1constructing B3 *constructing B1 3constructing B2 4 constructing B3 *,16,派生类析构造函数:,功能:是在该类对象消亡之前进行一些必要的清理工作。,定义方法:,与没有继承关系的类中析构函数的定义方法完全相同
10、,只要在函数体中负责把派生类新增的非对象成员的清理工作做好就够了,系统会自己调用基类及成员对象的析构函数来对基类及对象成员进行清理,执行次序:,和构造函数正好相反,首先对派生类新增普通成员进行清理,再新增的对象成员进行清理,最后对所有从基类继承来的成员进行清理。这些清理工作分别是执行派生类析构函数体、调用派生类对象成员所在类的析构函数和调用基类析构函数,17,例:派生类析构函数举例,#include class B1/基类B1,构造函数有参数 public: B1(int i) coutconstructing B1 iendl; B1( ) coutdestructing B1endl; ;
11、 class B2/基类B2,构造函数有参数 public: B2(int j)coutconstructing B2 jendl; B2() coutdestructing B2endl; ; class B3 /基类B3,构造函数无参数 public: B3( ) coutconstructing B3 *endl; B3( ) coutdestructing B3 endl; ;,18,class C:public B2,public B1,public B3 /派生新类C,注意基类名的顺序 public: /派生类的公有成员 C(int a,int b,int c,int d):B1(
12、a),memberB2(d),memberB1(c),B2(b) /注意基类名的个数与顺序及成员对象名的个数与顺序 private: /派生类的私有对象成员 B1 memberB1; B2 memberB2; B3 memberB3; ; void main( ) C obj(1,2,3,4); ,程序运行结果是: constructing B2 2constructing B1 1constructing B3 *constructing B1 3constructing B2 4 constructing B3 *destructing B3destructing B2destructin
13、g B1destructing B3destructing B1destructing B2,19,12.3 二义性问题,一般说来,在派生类中对基类成员的访问应该是惟一的。但是,由于多继承情况下,可能造成对基类中某个成员的访问出现了不惟一的情况(例;访问多基类中的同名成员),则称为对基类成员访问的二义性问题。,1. 同名成员的二义性,在多重继承中,如果不同基类中有同名的函数,则在派生类中就有同名的成员,这种成员会造成二义性。,20,例:,class A protected: void f(); ;class B public: void f(); void g(); ;class C: pub
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学内容
限制150内