第4章派生类与继承.ppt
《第4章派生类与继承.ppt》由会员分享,可在线阅读,更多相关《第4章派生类与继承.ppt(134页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、河北农业大学河北农业大学 信息学院信息学院 杨学全杨学全 20092009C+C+C+C+程序设计程序设计程序设计程序设计河北农业大学信息学院河北农业大学信息学院河北农业大学河北农业大学 信息学院信息学院 杨学全杨学全 20092009河北农业大学信息学院河北农业大学信息学院河北农业大学信息学院河北农业大学信息学院 杨学全杨学全杨学全杨学全第第4 4章章 派生类与继承派生类与继承河北农业大学河北农业大学 信息学院信息学院 杨学全杨学全 200920094.14.14.14.1 类之间的关系类之间的关系类之间的关系类之间的关系 has-Ahas-Ahas-Ahas-A,uses-A uses-A
2、 uses-A uses-A 和和和和 is-Ais-Ais-Ais-Ahas-Ahas-Ahas-Ahas-A 包包含含关关系系,用用以以描描述述一一个个类类由由多多个个“部部件件类类”构构成成。实实现现has-Ahas-A关系用类成员表示,即一个类中的数据成员是另一种已经定义的类。关系用类成员表示,即一个类中的数据成员是另一种已经定义的类。uses-Auses-Auses-Auses-A 一一个个类类部部分分地地使使用用另另一一个个类类。通通过过类类之之间间成成员员函函数数的的相相互互联联系,定义友元或对象参数传递实现。系,定义友元或对象参数传递实现。is-Ais-Ais-Ais-A 机制
3、称为机制称为“继承继承”。关系具有传递性。关系具有传递性,不具有对称性。不具有对称性。河北农业大学河北农业大学 信息学院信息学院 杨学全杨学全 200920094.14.14.14.1 类之间的关系类之间的关系类之间的关系类之间的关系 不具有对称性不具有对称性 不是所有植物都属于蕨类传递性传递性 高等植物、蕨类植物、芒萁都是植物,具有植物的共同特征植物植物低等植物低等植物高等植物高等植物藻类藻类菌类菌类地衣类地衣类苔藓类苔藓类蕨类蕨蕨类蕨裸子类裸子类被子类被子类地地钱钱小小金金发发草草毛毛蕨蕨芒芒萁萁杉杉木木柏柏木木荔荔枝枝橘橘子子河北农业大学河北农业大学 信息学院信息学院 杨学全杨学全 20
4、0920094.14.14.14.1 类之间的关系类之间的关系类之间的关系类之间的关系 继承继承继承继承是类之间定义的一种重要关系是类之间定义的一种重要关系一个一个B类继承类继承A类,或称从类类,或称从类A派生类派生类B类类A称为基类(父类),类称为基类(父类),类B称为派生类(子类)称为派生类(子类)AB1B2C1C2C3B1,B2的基类的基类A的派生类的派生类C1,C2,C3的基类的基类A的派生类(单继承)的派生类(单继承)C3的基类的基类B1,B2的派生类(多继承)的派生类(多继承)B1的派生类的派生类河北农业大学河北农业大学 信息学院信息学院 杨学全杨学全 20092009河北农业大学
5、河北农业大学 信息学院信息学院 杨学全杨学全 20092009类继承关系的语法形式类继承关系的语法形式class派生类名派生类名:基类名表基类名表数据成员和成员函数声明数据成员和成员函数声明;4.24.24.24.2 基类和派生类基类和派生类基类和派生类基类和派生类河北农业大学河北农业大学 信息学院信息学院 杨学全杨学全 20092009类继承关系的语法形式类继承关系的语法形式class 派生类名:基类名表基类名表 数据成员和成员函数声明;4.24.24.24.2 基类和派生类基类和派生类基类和派生类基类和派生类基类名表基类名表 构成构成访问控制访问控制 基类名基类名1,访问控制访问控制 基类
6、名基类名2,访问控制访问控制 基类名基类名n河北农业大学河北农业大学 信息学院信息学院 杨学全杨学全 20092009类继承关系的语法形式类继承关系的语法形式class派生类名派生类名:基类名表基类名表数据成员和成员函数声明数据成员和成员函数声明;4.24.24.24.2 基类和派生类基类和派生类基类和派生类基类和派生类基类名表基类名表 构成构成访问控制访问控制 基类名基类名1,访问控制访问控制 基类名基类名2,访问控制访问控制 基类名基类名n访问控制访问控制 表示派生类对基类的继承方式,使用关键字:表示派生类对基类的继承方式,使用关键字:publicpublic公有继承公有继承private
7、private私有继承私有继承protectedprotected保护继承保护继承河北农业大学河北农业大学 信息学院信息学院 杨学全杨学全 20092009派生类对基类成员的使用,与继承访问控制和基类中成员性质有关派生类对基类成员的使用,与继承访问控制和基类中成员性质有关公有继承公有继承基类的公有成员基类的公有成员派生类的公有成员派生类的公有成员 基类的保护成员基类的保护成员派生类的保护成员派生类的保护成员私有继承私有继承 基类的公有成员和保护成员基类的公有成员和保护成员派生类的私有成员派生类的私有成员保护继承保护继承 基类的公有成员和保护成员基类的公有成员和保护成员派生类的保护成员派生类的保
8、护成员不论何种方式继承基类,派生类都不能直接使用基类的私有成员不论何种方式继承基类,派生类都不能直接使用基类的私有成员4.2.1 访问控制4.2.14.2.1 访问控制访问控制河北农业大学河北农业大学 信息学院信息学院 杨学全杨学全 200920094.2.1 访问控制1.1.公有继承公有继承public成员成员 public成员成员protected成员成员 protected成员成员private成员成员public成员成员protected成员成员private成员成员基类基类派生类派生类河北农业大学河北农业大学 信息学院信息学院 杨学全杨学全 20092009#includeusing
9、namespacestd;classApublic:voidget_XY()coutxy;voidput_XY()coutx=x,y=yn;protected:intx,y;classB:publicApublic:intget_S()returns;voidmake_S()s=x*y;/使用基类数据成员使用基类数据成员x,yprotected:ints;classC:publicBpublic:voidget_H()couth;intget_V()returnv;voidmake_V()make_S();v=get_S()*h;/使用基类成员函数使用基类成员函数protected:inth,
10、v;例例4-1 公有继承的测试公有继承的测试 河北农业大学河北农业大学 信息学院信息学院 杨学全杨学全 20092009#includeusing namespace std;classA public:void get_XY()cout x y;void put_XY()cout x=x ,y=y n;protected:int x,y;classB:publicA public:int get_S()return s;void make_S()s=x*y;/使用基类数据成员使用基类数据成员x,y protected:int s;classC:publicB public:void get_
11、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 A4.2.1 访问控制例例4-1 公有继承的测试公有继承的测试 河北农业大学河北农业大学 信息学院信息学院 杨学全杨学全 20092009#includeusing namespace std;class A public:void get_XY()cout x y;void put_XY()cout x=x ,y=y n
12、;protected:protected:intintx,y;x,y;class B:public A public:int get_S()return s;void make_S()s=x*y;/使用基类数据成员x,y protected:protected:intints;s;class C:public Bpublic:void get_H()cout h;int get_V()return v;void make_V()make_S();v=get_S()*h;/使用基类成员函使用基类成员函数数 protected:protected:intinth,v;h,v;class Aclas
13、s C:public Yclass B:public X保护数据成员保护数据成员在类层次中可见在类层次中可见4.2.1 访问控制例例4-1 公有继承的测试公有继承的测试 河北农业大学河北农业大学 信息学院信息学院 杨学全杨学全 20092009intmain()AobjA;BobjB;CobjC;coutItisobject_A:n;objA.get_XY();objA.put_XY();coutItisobject_B:n;objB.get_XY();objB.make_S();coutS=objB.get_S()endl;coutItisobject_C:n;objC.get_XY();o
14、bjC.get_H();objC.make_V();coutV=objC.get_V()endl;4.2.1 访问控制例例4-1 公有继承的测试公有继承的测试 河北农业大学河北农业大学 信息学院信息学院 杨学全杨学全 20092009int main()AobjA;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.ge
15、t_XY();objC.get_H();objC.make_V();cout V=objC.get_V()endl;objA.yobjA.xobjAxy4.2.1 访问控制例例4-1 公有继承的测试公有继承的测试 河北农业大学河北农业大学 信息学院信息学院 杨学全杨学全 20092009int main()A objA;BobjB;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;co
16、ut It is object_C:n;objC.get_XY();objC.get_H();objC.make_V();cout V=objC.get_V()endl;objA.yobjA.xobjAxyobjB.sobjB.yobjB.xobjBs4.2.1 访问控制例例4-1 公有继承的测试公有继承的测试 河北农业大学河北农业大学 信息学院信息学院 杨学全杨学全 20092009int main()A objA;B objB;CobjC;cout It is object_A:n;objA.get_XY();objA.put_XY();cout It is object_B:n;objB
17、.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.xobjBxysobjC.hobjC.vobjC.sobjC.yobjC.xobjChv4.2.1 访问控制例例4-1 公有继承的测试公有继承的测试 河北农业大学河北农业大学 信息学院信息学院 杨学全杨学全 20092009int main()A objA;B o
18、bjB;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对对objA
19、的的数据成员操作数据成员操作xyshv4.2.1 访问控制例例4-1 公有继承的测试公有继承的测试 河北农业大学河北农业大学 信息学院信息学院 杨学全杨学全 20092009int 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
20、_V();cout V=objC.get_V()endl;objA.yobjA.xobjAobjB.sobjB.yobjB.xobjBobjC.hobjC.vobjC.sobjC.yobjC.xobjC调用基类调用基类A成员函数成员函数对对objB的数据成员操作的数据成员操作xyshv4.2.1 访问控制例例4-1 公有继承的测试公有继承的测试 河北农业大学河北农业大学 信息学院信息学院 杨学全杨学全 20092009int main()A objA;B objB;C objC;cout It is object_A:n;objA.get_XY();objA.put_XY();cout It
21、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调用派生类调用派生类B成员函数成员函数对对objB的数据成员操作的数据成员操作xyshv4.2.1 访问控制例例4-1 公有继承的测试公有继承的测试
22、河北农业大学河北农业大学 信息学院信息学院 杨学全杨学全 20092009int 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.
23、sobjB.yobjB.xobjBobjC.hobjC.vobjC.sobjC.yobjC.xobjC调用基类调用基类A成员函数成员函数对对objC的数据成员操作的数据成员操作xyshv4.2.1 访问控制例例4-1 公有继承的测试公有继承的测试 河北农业大学河北农业大学 信息学院信息学院 杨学全杨学全 20092009int 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=o
24、bjB.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调用派生类调用派生类C成员函数成员函数对对objC的数据成员操作的数据成员操作xyshv4.2.1 访问控制例例4-1 公有继承的测试公有继承的测试 河北农业大学河北农业大学 信息学院信息学院 杨学全杨学全 20092009intmain()Aobj
25、A;BobjB;CobjC;coutItisobject_A:n;objA.get_XY();objA.put_XY();coutItisobject_B:n;objB.get_XY();objB.make_S();coutS=objB.get_S()endl;coutItisobject_C:n;objC.get_XY();objC.get_H();objC.make_V();coutV=objC.get_V()endl;objA.yobjA.xobjAobjB.sobjB.yobjB.xobjBobjC.hobjC.vobjC.sobjC.yobjC.xobjCxyshv4.2.1 访问控
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 派生 继承
限制150内