第7章 继承性和派生类精选文档.ppt
《第7章 继承性和派生类精选文档.ppt》由会员分享,可在线阅读,更多相关《第7章 继承性和派生类精选文档.ppt(56页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第7章 继承性和派生类本讲稿第一页,共五十六页n保持已有类的特性而构造新类的过程称为继承。保持已有类的特性而构造新类的过程称为继承。n在已有类的基础上新增自己的特性而产生新类的过在已有类的基础上新增自己的特性而产生新类的过程称为派生。程称为派生。n被继承的已有类称为基类(或父类)。被继承的已有类称为基类(或父类)。n派生出的新类称为派生类。派生出的新类称为派生类。7.1 基类和派生类本讲稿第二页,共五十六页继承与派生问题举例工具车工具车面包车面包车轿车轿车小汽车小汽车卡车卡车旅行车旅行车汽车汽车交通工具交通工具本讲稿第三页,共五十六页继承与派生问题举例猴子猴子老虎老虎豹豹狮狮 子子猫猫鸟鸟动物
2、动物本讲稿第四页,共五十六页继承与派生问题举例圆圆矩形矩形几何形状几何形状本讲稿第五页,共五十六页继承与派生问题举例兼职技术人员兼职技术人员销售经理销售经理管理人员管理人员销售人员销售人员雇员雇员本讲稿第六页,共五十六页继承与派生的目的n继承的目的:实现代码重用。继承的目的:实现代码重用。n派生的目的:当新的问题出现,原有程派生的目的:当新的问题出现,原有程序无法解决(或不能完全解决)时,需序无法解决(或不能完全解决)时,需要对原有程序进行改造。要对原有程序进行改造。本讲稿第七页,共五十六页n继承关系,描述了派生类与基类之间的继承关系,描述了派生类与基类之间的“是是”关系,派生类是基类中的一种
3、,是它的具体化。关系,派生类是基类中的一种,是它的具体化。n组合关系,又称包含关系,一个类中有另一个组合关系,又称包含关系,一个类中有另一个类中的对象,表现两者之间的类中的对象,表现两者之间的“有有”的关系。的关系。类与类之间的关系本讲稿第八页,共五十六页单重继承和多重继承单重继承和多重继承继承可分为:继承可分为:n单重继承,指生成的派生类只有一个基类。单重继承,指生成的派生类只有一个基类。n多重继承,是指生成的派生类有两个或两个以多重继承,是指生成的派生类有两个或两个以上的基类。上的基类。两者的区别仅在于所继承基类数不同两者的区别仅在于所继承基类数不同本讲稿第九页,共五十六页 派生类定义格式
4、如下:派生类定义格式如下:class class :;7.1.1 派生类的定义本讲稿第十页,共五十六页n不同继承方式的影响主要体现在不同继承方式的影响主要体现在n派生类成员派生类成员对基类成员的访问权限对基类成员的访问权限n通过通过派生类对象派生类对象对基类成员的访问权限对基类成员的访问权限n继承方式包含以下继承方式包含以下3 3种:种:publicpublic(公有的方式);(公有的方式);privateprivate(私有的方式);(私有的方式);protectedprotected(保护的方式)。(保护的方式)。n默认方式:对默认方式:对classclass来讲是来讲是privatepr
5、ivate;对;对structstruct来讲是来讲是publicpublic。7.1.2 派生类的三种继承方式本讲稿第十一页,共五十六页 基类中的私有成员无论哪种继承方式在派生类中基类中的私有成员无论哪种继承方式在派生类中都是不能直接访问的。都是不能直接访问的。在公有继承方式下,基类中公有成员和保护成员在派生在公有继承方式下,基类中公有成员和保护成员在派生类中仍然是公有成员和保护成员。类中仍然是公有成员和保护成员。在私有继承方式下,基类中公有成员和保护成员在派生在私有继承方式下,基类中公有成员和保护成员在派生类中都为私有成员。类中都为私有成员。在保护继承方式下,基类中公有成员和保护成员在派在
6、保护继承方式下,基类中公有成员和保护成员在派生类中都为保护成员。生类中都为保护成员。7.1.3 基类成员在派生类中的访问权限本讲稿第十二页,共五十六页 基类成员在派生类中访问权限基类成员在派生类中访问权限 基类私有不可访问,公有不变,私有私有,保护保护。基类私有不可访问,公有不变,私有私有,保护保护。基类中成员基类中成员公有继承公有继承私有继承私有继承保护继承保护继承私成员私成员不可访问不可访问不可访问不可访问不可访问不可访问公成员公成员公有公有私有私有保护保护保护成员保护成员保护保护私有私有保护保护本讲稿第十三页,共五十六页7.1.4 成员访问权限的控制(1)(1)公有继承方式公有继承方式c
7、lass Pointclass 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;fl
8、oat GetX()return X;float GetY()return Y;float GetY()return Y;private:private:/私有数据成员私有数据成员私有数据成员私有数据成员float X,Y;float X,Y;例例1本讲稿第十四页,共五十六页class Rectangle:public Point /class Rectangle:public Point /派生类声明派生类声明派生类声明派生类声明 public:public:/新增公有函数成员新增公有函数成员新增公有函数成员新增公有函数成员void InitR(float x,float y,float w
9、,float h)void 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本讲稿第十五页,共五十六页
10、#include#include#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()
11、,rect.GetY(),rect.GetH(),rect.GetW()endl;rect.GetH(),rect.GetW()endl;return 0;return 0;例例1本讲稿第十六页,共五十六页 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;in
12、t j1;private:private:int i1;int i1;例例2本讲稿第十七页,共五十六页 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)私有继承方式)私有继承方式本讲
13、稿第十八页,共五十六页(3)保护继承方式nprotected protected 成员的特点与作用成员的特点与作用n对建立其所在类对象的模块来说,它与对建立其所在类对象的模块来说,它与 private private 成员的性质相同。成员的性质相同。n对于其派生类来说,它与对于其派生类来说,它与 public public 成员的性质成员的性质相同。相同。n既实现了数据隐藏,又方便继承,实现代既实现了数据隐藏,又方便继承,实现代码重用。码重用。本讲稿第十九页,共五十六页 class B:protected A public:B(const char*str):A(str)void Print(
14、)coutnameendl;void 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;本讲稿第二十页,共五十六页 class C:protected B public:void f4();protected:int c1;private:int
15、 c2;class D:private 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
16、:void f2();void f2();protected:protected:void f3();void f3();private:private:int b;int b;本讲稿第二十一页,共五十六页 成成员类员类f1f1()()a1a1a2a2f2f2()()f3f3()()b bf4f4()()c1c1c2c2f5f5()()d1d1d2d2类类A A(基(基类类)公公有有保保护护私私有有类类B B(公(公继继)公公有有保保护护不不可可访访公公有有保保护护私私有有类类C C(保(保继继)公公有有保保护护私私有有类类D D(私(私继继)公公有有保保护护私私有有本讲稿第二十二页,共五十六
17、页单重继承指的是仅有一个基类的派生继承。单重继承指的是仅有一个基类的派生继承。猴子猴子狮子狮子虎虎猎豹猎豹猫猫鸟鸟动物动物7.2 单继承本讲稿第二十三页,共五十六页n构造函数不能继承。构造函数不能继承。n派生类的构造函数承担着对基类中数据成员初始化和对派生类的构造函数承担着对基类中数据成员初始化和对派生类自身数据成员初始化的双重任务。派生类自身数据成员初始化的双重任务。n析构函数不能继承。析构函数不能继承。n派生类的析构函数应包含着基类的析构函数,用来派生类的析构函数应包含着基类的析构函数,用来释放基类中的数据成员。释放基类中的数据成员。7.2.1 派生类的构造函数和析构函数本讲稿第二十四页,
18、共五十六页n派生类的构造函数应该包含它的直接基类的构造派生类的构造函数应该包含它的直接基类的构造函数。定义格式如下:函数。定义格式如下:():):(),1 1派生类的构造函数派生类的构造函数7.2.1 派生类的构造函数和析构函数本讲稿第二十五页,共五十六页 派生类构造函数的执行顺序如下:派生类构造函数的执行顺序如下:n 先执行基类构造函数;先执行基类构造函数;n再执行子对象的构造函数(如有子对象的话);再执行子对象的构造函数(如有子对象的话);n最后执行派生类构造函数的函数体。最后执行派生类构造函数的函数体。掌握派生类构造函数时应注意如下两点 派生类构造函数的成员初始化列表中应该显式地派生类构
19、造函数的成员初始化列表中应该显式地包含基类中带参数的构造函数,或者隐含地包含基包含基类中带参数的构造函数,或者隐含地包含基类中的默认构造函数。类中的默认构造函数。本讲稿第二十六页,共五十六页n由于析构函数不能继承,因此在派生类的析构函数由于析构函数不能继承,因此在派生类的析构函数中要包含它的直接基类的析构函数。中要包含它的直接基类的析构函数。n派生类析构函数的执行顺序如下:派生类析构函数的执行顺序如下:2 2派生类的析构函数派生类的析构函数n最后执行直接基类中的析构函数。最后执行直接基类中的析构函数。n再再执执行行子子对对象象所所在在类类的的析析构构函函数数(如如果果有有子子对对象象的话)的话
20、)n先执行派生类析构函数的函数体先执行派生类析构函数的函数体本讲稿第二十七页,共五十六页例例例例 派生类构造函数的执行顺序派生类构造函数的执行顺序派生类构造函数的执行顺序派生类构造函数的执行顺序#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
21、 called.aendl;A()coutDestructor 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;本讲稿第二十八页,共五十六页 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:publi
22、c A public:public:B()B()b=0;b=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
23、 Print()void Print()A:Print();A:Print();coutb,aa.Geta()endl;coutb,aa.Geta()endl;private:private:int b;int b;A aa;A aa;本讲稿第二十九页,共五十六页 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章 继承性和派生类精选文档 继承 派生 精选 文档
限制150内