第7章 继承性和派生类精选PPT.ppt
《第7章 继承性和派生类精选PPT.ppt》由会员分享,可在线阅读,更多相关《第7章 继承性和派生类精选PPT.ppt(56页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第7章 继承性和派生类第1页,本讲稿共56页n保持已有类的特性而构造新类的过程称为继承。保持已有类的特性而构造新类的过程称为继承。n在已有类的基础上新增自己的特性而产生新类的过程在已有类的基础上新增自己的特性而产生新类的过程称为派生。称为派生。n被继承的已有类称为基类(或父类)。被继承的已有类称为基类(或父类)。n派生出的新类称为派生类。派生出的新类称为派生类。7.1 基类和派生类第2页,本讲稿共56页继承与派生问题举例工具车工具车面包车面包车轿车轿车小汽车小汽车卡车卡车旅行车旅行车汽车汽车交通工具交通工具第3页,本讲稿共56页继承与派生问题举例猴子猴子老虎老虎豹豹狮狮 子子猫猫鸟鸟动物动物第
2、4页,本讲稿共56页继承与派生问题举例圆圆矩形矩形几何形状几何形状第5页,本讲稿共56页继承与派生问题举例兼职技术人员兼职技术人员销售经理销售经理管理人员管理人员销售人员销售人员雇员雇员第6页,本讲稿共56页继承与派生的目的n继承的目的:实现代码重用。继承的目的:实现代码重用。n派生的目的:当新的问题出现,原有程派生的目的:当新的问题出现,原有程序无法解决(或不能完全解决)时,需序无法解决(或不能完全解决)时,需要对原有程序进行改造。要对原有程序进行改造。第7页,本讲稿共56页n继承关系,描述了派生类与基类之间的继承关系,描述了派生类与基类之间的“是是”关系,派生类是基类中的一种,是它的关系,
3、派生类是基类中的一种,是它的具体化。具体化。n组合关系,又称包含关系,一个类中有另组合关系,又称包含关系,一个类中有另一个类中的对象,表现两者之间的一个类中的对象,表现两者之间的“有有”的的关系。关系。类与类之间的关系第8页,本讲稿共56页单重继承和多重继承单重继承和多重继承继承可分为:继承可分为:n单重继承,指生成的派生类只有一个基类。单重继承,指生成的派生类只有一个基类。n多重继承,是指生成的派生类有两个或两个多重继承,是指生成的派生类有两个或两个以上的基类。以上的基类。两者的区别仅在于所继承基类数不同两者的区别仅在于所继承基类数不同第9页,本讲稿共56页 派生类定义格式如下:派生类定义格
4、式如下:class class :;7.1.1 派生类的定义第10页,本讲稿共56页n不同继承方式的影响主要体现在不同继承方式的影响主要体现在n派生类成员派生类成员对基类成员的访问权限对基类成员的访问权限n通过通过派生类对象派生类对象对基类成员的访问权限对基类成员的访问权限n继承方式包含以下继承方式包含以下3 3种:种:publicpublic(公有的方式);(公有的方式);privateprivate(私有的方式);(私有的方式);protectedprotected(保护的方式)。(保护的方式)。n默认方式:对默认方式:对classclass来讲是来讲是privateprivate;对;对
5、structstruct来讲是来讲是publicpublic。7.1.2 派生类的三种继承方式第11页,本讲稿共56页 基类中的私有成员无论哪种继承方式在派生类中基类中的私有成员无论哪种继承方式在派生类中都是不能直接访问的。都是不能直接访问的。在公有继承方式下,基类中公有成员和保护成员在派生在公有继承方式下,基类中公有成员和保护成员在派生类中仍然是公有成员和保护成员。类中仍然是公有成员和保护成员。在私有继承方式下,基类中公有成员和保护成员在派在私有继承方式下,基类中公有成员和保护成员在派生类中都为私有成员。生类中都为私有成员。在保护继承方式下,基类中公有成员和保护成员在派在保护继承方式下,基类
6、中公有成员和保护成员在派生类中都为保护成员。生类中都为保护成员。7.1.3 基类成员在派生类中的访问权限第12页,本讲稿共56页 基类成员在派生类中访问权限基类成员在派生类中访问权限 基类私有不可访问,公有不变,私有私有,保护保护。基类私有不可访问,公有不变,私有私有,保护保护。基类中成员基类中成员公有继承公有继承私有继承私有继承保护继承保护继承私成员私成员不可访问不可访问不可访问不可访问不可访问不可访问公成员公成员公有公有私有私有保护保护保护成员保护成员保护保护私有私有保护保护第13页,本讲稿共56页7.1.4 成员访问权限的控制(1)(1)公有继承方式公有继承方式class Pointcl
7、ass Point/基类基类基类基类PointPoint类的声明类的声明类的声明类的声明public:public:/公有函数成员公有函数成员公有函数成员公有函数成员void InitP(float xx=0,float yy=0)X=xx;Y=yy;void InitP(float xx=0,float yy=0)X=xx;Y=yy;void Move(float xOff,float yOff)X+=xOff;Y+=yOff;void Move(float xOff,float yOff)X+=xOff;Y+=yOff;float GetX()return X;float GetX()re
8、turn X;float GetY()return Y;float GetY()return Y;private:private:/私有数据成员私有数据成员私有数据成员私有数据成员float X,Y;float X,Y;例例1第14页,本讲稿共56页class Rectangle:public Point /class Rectangle:public Point /派生类声明派生类声明派生类声明派生类声明 public:public:/新增公有函数成员新增公有函数成员新增公有函数成员新增公有函数成员void InitR(float x,float y,float w,float h)void
9、 InitR(float x,float y,float w,float h)InitPInitP(x,y);W=w;H=h;(x,y);W=w;H=h;/调用基类公有成员函数调用基类公有成员函数调用基类公有成员函数调用基类公有成员函数float GetH()return H;float GetH()return H;float GetW()return W;float GetW()return W;private:private:/新增私有数据成员新增私有数据成员新增私有数据成员新增私有数据成员float W,H;float W,H;例例1第15页,本讲稿共56页#include#inclu
10、de#include#includeusing namecpace std;using namecpace std;int main()int main()Rectangle rect;Rectangle rect;rect.InitR(2,3,20,10);rect.InitR(2,3,20,10);/通过派生类对象访问基类公有成员通过派生类对象访问基类公有成员通过派生类对象访问基类公有成员通过派生类对象访问基类公有成员rect.Move(3,2);rect.Move(3,2);coutrect.GetX(),rect.GetY(),coutrect.GetX(),rect.GetY(),r
11、ect.GetH(),rect.GetW()endl;rect.GetH(),rect.GetW()endl;return 0;return 0;例例1第16页,本讲稿共56页 class B:public A public:void f2();protected:int j2;private:int i2;class C:public B public:void f3();#include#include class A class A public:public:void f1();void f1();protected:protected:int j1;int j1;private:pr
12、ivate:int i1;int i1;例例2第17页,本讲稿共56页 class B:A/class默默认私有私有继承承 public:void h()coutBn;A:f;/引入本作用域引入本作用域 ;void main()B b;b.f(10);b.g();/错 b.h();#include#include class A class A public:public:void f(int i)void f(int i)coutiendl;coutiendl;void g()void g()coutAn;coutAn;(2 2)私有继承方式)私有继承方式第18页,本讲稿共56页(3)保护继
13、承方式nprotected protected 成员的特点与作用成员的特点与作用n对建立其所在类对象的模块来说,它与对建立其所在类对象的模块来说,它与 private private 成员的性质相同。成员的性质相同。n对于其派生类来说,它与对于其派生类来说,它与 public public 成员的性质成员的性质相同。相同。n既实现了数据隐藏,又方便继承,实现代既实现了数据隐藏,又方便继承,实现代码重用。码重用。第19页,本讲稿共56页 class B:protected A public:B(const char*str):A(str)void Print()coutnameendl;void
14、 main()B b(Zhang);b.Print();#include#include#include#include class A class A public:public:A(const char*str)A(const char*str)strcpy(name,str);strcpy(name,str);protected:protected:char name80;char name80;第20页,本讲稿共56页 class C:protected B public:void f4();protected:int c1;private:int c2;class D:private
15、 C public:void f5();protected:int d1;private:int d2;例例 分析下列程序,并填写不同成员在不同类的访问权限。分析下列程序,并填写不同成员在不同类的访问权限。#include#include class A class A public:public:void f1();void f1();protected:protected:int a1;int a1;private:private:int a2;int a2;class B:public A class B:public A public:public:void f2();void f2(
16、);protected:protected:void f3();void f3();private:private:int b;int b;第21页,本讲稿共56页 成成员类员类f1f1()()a1a1 a2a2f2f2()()f3f3()()b bf4f4()()c1c1 c2c2f5f5()()d1d1 d2d2类类A A(基(基类类)公公有有保保护护私私有有 类类B B(公(公继继)公公有有保保护护不不可可访访公公有有保保护护私私有有 类类C C(保(保继继)公公有有保保护护私私有有 类类D D(私(私继继)公公有有保保护护私私有有第22页,本讲稿共56页单重继承指的是仅有一个基类的派生
17、继承。单重继承指的是仅有一个基类的派生继承。猴子猴子狮子狮子虎虎猎豹猎豹猫猫鸟鸟动物动物7.2 单继承第23页,本讲稿共56页n构造函数不能继承。构造函数不能继承。n派生类的构造函数承担着对基类中数据成员初始化和对派生类的构造函数承担着对基类中数据成员初始化和对派生类自身数据成员初始化的双重任务。派生类自身数据成员初始化的双重任务。n析构函数不能继承。析构函数不能继承。n派生类的析构函数应包含着基类的析构函数,用派生类的析构函数应包含着基类的析构函数,用来释放基类中的数据成员。来释放基类中的数据成员。7.2.1 派生类的构造函数和析构函数第24页,本讲稿共56页n派生类的构造函数应该包含它的直
18、接基类的构造函数。派生类的构造函数应该包含它的直接基类的构造函数。定义格式如下:定义格式如下:():):(),1 1派生类的构造函数派生类的构造函数7.2.1 派生类的构造函数和析构函数第25页,本讲稿共56页 派生类构造函数的执行顺序如下:派生类构造函数的执行顺序如下:n 先执行基类构造函数;先执行基类构造函数;n再执行子对象的构造函数(如有子对象的话);再执行子对象的构造函数(如有子对象的话);n最后执行派生类构造函数的函数体。最后执行派生类构造函数的函数体。掌握派生类构造函数时应注意如下两点 派生类构造函数的成员初始化列表中应该显式地派生类构造函数的成员初始化列表中应该显式地包含基类中带
19、参数的构造函数,或者隐含地包含基包含基类中带参数的构造函数,或者隐含地包含基类中的默认构造函数。类中的默认构造函数。第26页,本讲稿共56页n由于析构函数不能继承,因此在派生类的析构函数中要由于析构函数不能继承,因此在派生类的析构函数中要包含它的直接基类的析构函数。包含它的直接基类的析构函数。n派生类析构函数的执行顺序如下:派生类析构函数的执行顺序如下:2 2派生类的析构函数派生类的析构函数n最后执行直接基类中的析构函数。最后执行直接基类中的析构函数。n再再执执行行子子对对象象所所在在类类的的析析构构函函数数(如如果果有有子子对对象象的的话)话)n先执行派生类析构函数的函数体先执行派生类析构函
20、数的函数体第27页,本讲稿共56页例例例例 派生类构造函数的执行顺序派生类构造函数的执行顺序派生类构造函数的执行顺序派生类构造函数的执行顺序#include#include class A class A public:public:A()A()a=0;a=0;coutDefault constructor called.aendl;coutDefault constructor called.aendl;A(int i)A(int i)a=i;a=i;coutConstructor called.aendl;coutConstructor called.aendl;A()coutDestru
21、ctor called.aendl;A()coutDestructor called.aendl;void Print()couta,;void Print()couta,;int Geta()return a;int Geta()return a;private:private:int a;int a;第28页,本讲稿共56页 void main()B bb2;bb0=B(7,8,9);bb1=B(12,13,14);for(int i=0;i2;i+)bbi.Print();class B:public Aclass B:public A public:public:B()B()b=0;b
22、=0;coutDefault constructor called.bendl;coutDefault constructor called.bendl;B(int i,int j,int k):A(i),aa(j)B(int i,int j,int k):A(i),aa(j)b=k;b=k;coutConstructor called.bendl;coutConstructor called.bendl;B()coutDestructor called.bendl;B()coutDestructor called.bendl;void Print()void Print()A:Print()
23、;A:Print();coutb,aa.Geta()endl;coutb,aa.Geta()endl;private:private:int b;int b;A aa;A aa;第29页,本讲稿共56页 class B:public A public:B()b1=b2=0;B(int i)b1=0;b2=i;B(int i,int j,int k):A(i),b1(j),b2(k)B()coutIn B.n;void Print()A:Print();coutb1,b2,;private:int b1,b2;例例例例 多层派生类构造函数和析构函数。多层派生类构造函数和析构函数。多层派生类构造函
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第7章 继承性和派生类精选PPT 继承 派生 精选 PPT
限制150内