派生类与继承课件.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《派生类与继承课件.pptx》由用户(ziliao2023)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 派生 继承 课件
- 资源描述:
-
1、 has-A(包含关系),用以描述一个类由多个(包含关系),用以描述一个类由多个“部件类部件类”构成。实现构成。实现has-A关系用类成员表示,关系用类成员表示,即一个类中的数据成员是已定义的类。即一个类中的数据成员是已定义的类。uses-A(一个类部分地使用另一个类),通过(一个类部分地使用另一个类),通过类之间成员函数的相互联系,定义友员或对象参数类之间成员函数的相互联系,定义友员或对象参数传递实现。传递实现。is-A(继承)。关系具有传递性(继承)。关系具有传递性,不具有对称性。不具有对称性。第1页/共110页非对称性非对称性:不是所有植物都属于蕨类。:不是所有植物都属于蕨类。传递性:传
2、递性:高等植物、蕨类植物、芒萁都是植物,高等植物、蕨类植物、芒萁都是植物,具有植物的共同特征。具有植物的共同特征。植物 低等植物高等植物藻类菌类地衣类苔藓类蕨类裸子类被子类地钱小金发草毛蕨芒萁杉木柏木荔枝橘子第2页/共110页 继承继承 是类之间定义的一种重要关系。是类之间定义的一种重要关系。一个一个 B 类继承类继承A类,或称从类类,或称从类 A 派生类派生类 B 类类 A 称为基类(父类),类称为基类(父类),类 B 称为派生类(子类)称为派生类(子类)B1,B2 的基类A 的派生类C1,C2,C3 的基类A 的派生类(单继承)C3的基类B1,B2 的派生类(多继承)AB1B2C1C2C3
3、B1 的派生类第3页/共110页class person protected:char name10;int age;char sex;public:void print();class employee protected:char name10;int age;char sex;char department20;float salary;public:void print();第4页/共110页继承继承:保持已有类的特性而构造新类的过程。保持已有类的特性而构造新类的过程。派生:派生:在已有类的基础上新增自己的特性而产生在已有类的基础上新增自己的特性而产生新类的过程。新类的过程。继承的目的
4、:继承的目的:实现代码重用。实现代码重用。派生的目的:派生的目的:当新的问题出现,原有程序无法解当新的问题出现,原有程序无法解决(或不能完全解决)时,需要对原有程序进行决(或不能完全解决)时,需要对原有程序进行改造。改造。第5页/共110页继承关系的语法形式继承关系的语法形式class 派生类名派生类名:基类名表基类名表 数据成员和成员函数声明数据成员和成员函数声明;派生类的功能:派生类的功能:可以增加新的数据成员;可以增加新的数据成员;可以增加新的成员函数;可以增加新的成员函数;可以重新定义基类中已有的成员函数;可以重新定义基类中已有的成员函数;可以改变现有成员的属性。可以改变现有成员的属性
5、。第6页/共110页基类名表基类名表 构成构成访问控制访问控制 基类名基类名1,访问控制访问控制 基类名基类名2,访问控制访问控制 基类名基类名n访问控制:访问控制:表示派生类对基类的继承方式表示派生类对基类的继承方式 公有继承公有继承 私有继承私有继承 保护继承保护继承第7页/共110页派生类对基类成员的使用,与继承访问控制和基派生类对基类成员的使用,与继承访问控制和基类中成员性质有关;类中成员性质有关;公有继承公有继承 基类的公有成员基类的公有成员派生类的公有成员派生类的公有成员基类的保护成员基类的保护成员派生类的保护成员派生类的保护成员私有继承私有继承 基类的公有成员和保护成员基类的公有
6、成员和保护成员 派生类的私有成员派生类的私有成员保护继承保护继承 基类的公有成员和保护成员基类的公有成员和保护成员 派生类的保护成员派生类的保护成员不论什么方式继承基类,派生类都不能直接使用不论什么方式继承基类,派生类都不能直接使用基类的私有成员。基类的私有成员。第8页/共110页(1 1)公有继承public 成员 public 成员protected 成员 protected 成员private 成员public 成员protected 成员private 成员基类派生类第9页/共110页#includeclass A public:void get_XY()cout x y;void p
7、ut_XY()cout x=x ,y=y n;protected:int x,y;class B:public A public:int get_S()return s;void make_S()s=x*y;/使用基类数据成员 x,y protected:int s;class C:public B public:void get_H()cout h;int get_V()return v;void make_V()make_S();v=get_S()*h;/使用基类成员函数 protected:int h,v;class Aclass C:public Bclass B:public A公有
8、继承的测试 第10页/共110页#includeclass A public:void get_XY()cout x y;void put_XY()cout x=x ,y=y n;class B:public A public:int get_S()return s;void make_S()s=x*y;/使用基类数据成员 x,y ;class C:public Bpublic:void get_H()cout h;int get_V()return v;void make_V()make_S();v=get_S()*h;/使用基类成员函数 ;class Aclass C:public Ycl
9、ass B:public X保护数据成员在类层次中可见公有继承的测试 第11页/共110页void main()A objA;B objB;C objC;cout It is object_A:n;objA.get_XY();objA.put_XY();cout It is object_B:n;objB.get_XY();objB.make_S();cout S=objB.get_S()endl;cout It is object_C:n;objC.get_XY();objC.get_H();objC.make_V();cout V=objC.get_V()endl;公有继承的测试 第12页
10、/共110页void main()A objA;B objB;C objC;cout It is object_A:n;objA.get_XY();objA.put_XY();cout It is object_B:n;objB.get_XY();objB.make_S();cout S=objB.get_S()endl;cout It is object_C:n;objC.get_XY();objC.get_H();objC.make_V();cout V=objC.get_V()endl;objA.yobjA.xobjAx y 公有继承的测试 第13页/共110页void main()A
11、objA;B objB;C objC;cout It is object_A:n;objA.get_XY();objA.put_XY();cout It is object_B:n;objB.get_XY();objB.make_S();cout S=objB.get_S()endl;cout It is object_C:n;objC.get_XY();objC.get_H();objC.make_V();cout V=objC.get_V()endl;objA.yobjA.xobjAx y objB.sobjB.yobjB.xobjBs公有继承的测试 第14页/共110页void main
12、()A objA;B objB;C objC;cout It is object_A:n;objA.get_XY();objA.put_XY();cout It is object_B:n;objB.get_XY();objB.make_S();cout S=objB.get_S()endl;cout It is object_C:n;objC.get_XY();objC.get_H();objC.make_V();cout V=objC.get_V()endl;objA.yobjA.xobjAobjB.sobjB.yobjB.xobjBx y sobjC.hobjC.vobjC.sobjC.
13、yobjC.xobjCh v 公有继承的测试 第15页/共110页void main()A objA;B objB;C objC;cout It is object_A:n;objA.get_XY();objA.put_XY();cout It is object_B:n;objB.get_XY();objB.make_S();cout S=objB.get_S()endl;cout It is object_C:n;objC.get_XY();objC.get_H();objC.make_V();cout V=objC.get_V()endl;objA.yobjA.xobjAobjB.sob
14、jB.yobjB.xobjBobjC.hobjC.vobjC.sobjC.yobjC.xobjC对 objA 的数据成员操作x y sh v 公有继承的测试 第16页/共110页void main()A objA;B objB;C objC;cout It is object_A:n;objA.get_XY();objA.put_XY();cout It is object_B:n;objB.get_XY();objB.make_S();cout S=objB.get_S()endl;cout It is object_C:n;objC.get_XY();objC.get_H();objC.m
15、ake_V();cout V=objC.get_V()endl;objA.yobjA.xobjAobjB.sobjB.yobjB.xobjBobjC.hobjC.vobjC.sobjC.yobjC.xobjC调用基类A成员函数对 objB 的数据成员操作x y sh v 公有继承的测试 第17页/共110页void main()A objA;B objB;C objC;cout It is object_A:n;objA.get_XY();objA.put_XY();cout It is object_B:n;objB.get_XY();objB.make_S();cout S=objB.ge
16、t_S()endl;cout It is object_C:n;objC.get_XY();objC.get_H();objC.make_V();cout V=objC.get_V()endl;objA.yobjA.xobjAobjB.sobjB.yobjB.xobjBobjC.hobjC.vobjC.sobjC.yobjC.xobjC调用派生类B成员函数对 objB 的数据成员操作x y sh v 公有继承的测试 第18页/共110页void main()A objA;B objB;C objC;cout It is object_A:n;objA.get_XY();objA.put_XY(
17、);cout It is object_B:n;objB.get_XY();objB.make_S();cout S=objB.get_S()endl;cout It is object_C:n;objC.get_XY();objC.get_H();objC.make_V();cout V=objC.get_V()endl;objA.yobjA.xobjAobjB.sobjB.yobjB.xobjBobjC.hobjC.vobjC.sobjC.yobjC.xobjC调用基类A成员函数对 objC 的数据成员操作x y sh v 公有继承的测试 第19页/共110页void main()A ob
18、jA;B objB;C objC;cout It is object_A:n;objA.get_XY();objA.put_XY();cout It is object_B:n;objB.get_XY();objB.make_S();cout S=objB.get_S()endl;cout It is object_C:n;objC.get_XY();objC.get_H();objC.make_V();cout V=objC.get_V()endl;objA.yobjA.xobjAobjB.sobjB.yobjB.xobjBobjC.hobjC.vobjC.sobjC.yobjC.xobjC
19、调用派生类C成员函数对 objC 的数据成员操作x y sh v 公有继承的测试 第20页/共110页void main()A objA;B objB;C objC;cout It is object_A:n;objA.get_XY();objA.put_XY();cout It is object_B:n;objB.get_XY();objB.make_S();cout S=objB.get_S()endl;cout It is object_C:n;objC.get_XY();objC.get_H();objC.make_V();cout V=objC.get_V()endl;objA.y
20、objA.xobjAobjB.sobjB.yobjB.xobjBobjC.hobjC.vobjC.sobjC.yobjC.xobjCx y sh v 公有继承的测试 第21页/共110页public 成员protected 成员private 成员public 成员protected 成员private 成员基类派生类private 成员private 成员(2 2)私有继承第22页/共110页#includeclass A public:void get_XY()cout x y;void put_XY()cout x=x ,y=y n;protected:int x,y;class B:p
21、rivate A public:int get_S()return s;void make_S()get_XY();s=x*y;private:int s;void main()B objB;cout It is object_B:n;objB.make_S();cout S=objB.get_S()endl;私有继承的测试 class B:private Aclass A objB.sobjB.yobjB.xobjBprivate成员第23页/共110页#includeclass A public:void get_XY()cout x y;void put_XY()cout x=x ,y=
22、y n;protected:int x,y;class B:private A public:int get_S()return s;void make_S()get_XY();s=x*y;private:int s;void main()B objB;cout It is object_B:n;objB.make_S();cout S=objB.get_S()endl;class B:private Aclass A 调用基类成员函数objB.sobjB.yobjB.xobjBprivate成员私有继承的测试 第24页/共110页#includeclass A public:void get
23、_XY()cout x y;void put_XY()cout x=x ,y=y n;protected:int x,y;class B:private A public:int get_S()return s;void make_S()get_XY();s=x*y;private:int s;void main()B objB;cout It is object_B:n;objB.make_S();cout S=objB.get_S()endl;class B:private Aclass A 访问私有数据成员objB.sobjB.yobjB.xobjBprivate成员私有继承的测试 第2
24、5页/共110页#includeclass A public:void get_XY()cout x y;void put_XY()cout x=x ,y=y n;protected:int x,y;class B:private A public:int get_S()return s;void make_S()get_XY();s=x*y;private:int s;void main()B objB;cout It is object_B:n;objB.make_S();cout S=objB.get_S()endl;class B:private Aclass A objB.sobjB
25、.yobjB.xobjBprivate成员私有继承的测试 第26页/共110页#includeclass A public:A()x=1;int out()return x;void addX()x+;private:int x;class B:public A public:B()y=1;int out()return y;void addY()y+;private:int y;void main()A a;B b;b.addX();b.addY();cout a.x=a.out()endl;cout b.x=b.A:out()endl;cout b.y=b.out()endl;class
展开阅读全文