《派生类与继承》PPT课件.ppt
《《派生类与继承》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《派生类与继承》PPT课件.ppt(70页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第4章章派生类与继承派生类与继承1/12/20231面向对象程序设计技术4.1继承与派生类继承与派生类u4.1.1为什么要使用继承为什么要使用继承l l重用:通过继承机制,利用已有的类来定义新类,重用:通过继承机制,利用已有的类来定义新类,重用:通过继承机制,利用已有的类来定义新类,重用:通过继承机制,利用已有的类来定义新类,新的类不仅可以有新的成员,还拥有从已有的类继新的类不仅可以有新的成员,还拥有从已有的类继新的类不仅可以有新的成员,还拥有从已有的类继新的类不仅可以有新的成员,还拥有从已有的类继承来的成员。承来的成员。承来的成员。承来的成员。l l已有的类称为已有的类称为已有的类称为已有
2、的类称为基类基类基类基类或或或或父类父类父类父类,新的类称为,新的类称为,新的类称为,新的类称为派生类派生类派生类派生类或或或或子子子子类类类类。如果派生类从一个基类派生的,称这种继承为如果派生类从一个基类派生的,称这种继承为如果派生类从一个基类派生的,称这种继承为如果派生类从一个基类派生的,称这种继承为单继承单继承单继承单继承;如果派生类从多个基类派生的,称这种继;如果派生类从多个基类派生的,称这种继;如果派生类从多个基类派生的,称这种继;如果派生类从多个基类派生的,称这种继承为承为承为承为多继承多继承多继承多继承。4.1继承与派生类继承与派生类单继承单继承4.1继承与派生类继承与派生类多继
3、承多继承4.1继承与派生类继承与派生类u4.1.2派生类的声明派生类的声明如果不采用派生类方法如果不采用派生类方法class person class person protected:protected:char name10;char name10;int age;int age;char sex;char sex;public:public:void print();void print();class employee protected:char name10;int age;char sex;char department20;float salary;public:print()
4、;重复书写!重复书写!4.1继承与派生类继承与派生类l l改写改写改写改写/定义一个基类定义一个基类定义一个基类定义一个基类classclasspersonperson protected:protected:charname10;charname10;intage;intage;charsex;charsex;public:public:/;/定义一个派生类定义一个派生类定义一个派生类定义一个派生类classemployee:classemployee:publicpublic personperson protected:protected:chardepartment20;chardep
5、artment20;floatsalary;floatsalary;public:public:/;4.1继承与派生类继承与派生类l声明一个派生类的一般格式为声明一个派生类的一般格式为:class派生类名派生类名:继承方式继承方式基类名基类名派生类新定义成员派生类新定义成员;其中,其中,继承方式继承方式有有3种种:public(公有派生)(公有派生)、private(私有派生,缺省情况下也如此(私有派生,缺省情况下也如此)、protected(保护派生)。(保护派生)。由类由类由类由类personperson继承出类继承出类继承出类继承出类employeeemployee可以采用下面的三种可以
6、采用下面的三种可以采用下面的三种可以采用下面的三种格式之一格式之一格式之一格式之一:(1)(1)公有继承公有继承公有继承公有继承 classemployee:publicpersonclassemployee:publicperson/;(2)(2)私有继承私有继承私有继承私有继承classemployee:privatepersonclassemployee:privateperson/;(3)(3)保护继承保护继承保护继承保护继承classemployee:protectedpersonclassemployee:protectedperson/;4.1继承与派生类继承与派生类l派生类的派
7、生类的变异功能变异功能从已有类派生出新类时,可以在派生类内从已有类派生出新类时,可以在派生类内完成以下几种功能完成以下几种功能:(1)可以增加新的数据成员可以增加新的数据成员;(2)可以增加新的成员函数可以增加新的成员函数;(3)可以重新定义基类中已有的成员函数可以重新定义基类中已有的成员函数;(4)可以改变现有成员的属性。可以改变现有成员的属性。4.1继承与派生类继承与派生类u4.1.3基类成员在派生类中的访问属性基类成员在派生类中的访问属性在基类中的访问属性在基类中的访问属性继承方式继承方式在派生类中的访问属性在派生类中的访问属性privatepublic不可直接访问不可直接访问priva
8、teprivate不可直接访问不可直接访问privateprotected不可直接访问不可直接访问publicpublicpublicpublicprivateprivatepublicprotectedprotectedprotectedpublicprotectedprotectedprivateprivateprotectedprotectedprotected4.1继承与派生类继承与派生类不不可可见见可可见见可可见见u4.1.4派生类对基类成员的访问规则派生类对基类成员的访问规则派生类对基类成员的访问形式主要有以派生类对基类成员的访问形式主要有以下两种下两种:(1)内部访问内部访问:由
9、派生类中新增成员对基类由派生类中新增成员对基类继承来的成员的访问。继承来的成员的访问。(2)对象访问对象访问:在派生类外部在派生类外部,通过派生类的通过派生类的对象对从基类继承来的成员的访问。对象对从基类继承来的成员的访问。4.1继承与派生类继承与派生类l私有继承的访问规则私有继承的访问规则基基基基类类类类的的的的publicpublic成成成成员员员员和和和和protectedprotected成成成成员员员员被被被被继继继继承承承承后后后后作作作作为为为为派派派派生生生生类类类类的的的的privateprivate成成成成员员员员,派派派派生生生生类类类类的的的的其其其其他他他他成成成成员
10、员员员可可可可以以以以直直直直接接接接访访访访问问问问它它它它们们们们,但但但但是是是是在在在在类类类类外外外外部部部部通通通通过过过过派派派派生生生生类类类类的的的的对对对对象象象象无无无无法访问。法访问。法访问。法访问。基类的基类的基类的基类的privateprivate成员成员成员成员在私有派生类中是在私有派生类中是在私有派生类中是在私有派生类中是不可直接访不可直接访不可直接访不可直接访问问问问的,所以无论是派生类成员还是通过派生类的的,所以无论是派生类成员还是通过派生类的的,所以无论是派生类成员还是通过派生类的的,所以无论是派生类成员还是通过派生类的对象,都无法直接访问从基类继承来的对
11、象,都无法直接访问从基类继承来的对象,都无法直接访问从基类继承来的对象,都无法直接访问从基类继承来的privateprivate成成成成员,但是可以通过基类提供的员,但是可以通过基类提供的员,但是可以通过基类提供的员,但是可以通过基类提供的publicpublic成员函数间成员函数间成员函数间成员函数间接访问。接访问。接访问。接访问。4.1继承与派生类继承与派生类基类成员基类成员private成员成员public成员成员protected成员成员内部访问内部访问对象访问对象访问不可访问不可访问不可访问不可访问可访问可访问不可访问不可访问可访问可访问不可访问不可访问classfathclassf
12、athpublic:public:intainta,b b;intgetx()returnX;intgetx()returnX;intgety()returnY;intgety()returnY;protectedprotected:intcintc,d d;private:private:intX,Y;intX,Y;说明:class son:private fath int W,H;pubulic:void large();等价于等价于classson/classson/public:public:/voidlarge();voidlarge();protectedprotected:pri
13、vate:private:/intW,H;intW,H;intainta,b b;intgetx()returnX;intgetx()returnX;intgety()returnY;intgety()returnY;intcintc,d d;fatherprivate:fatherprivate:intX,Y;intX,Y;son:son1;son1 可以访问large()son1.large 可以访问 除了X、Y以外的任 何成员4.1继承与派生类继承与派生类l l例例例例4.14.1一个私有继承的例子一个私有继承的例子一个私有继承的例子一个私有继承的例子#includeiostream.h
14、#includeiostream.hclassclassx xinta;inta;public:public:x()a=12;x()a=12;intget()returna;intget()returna;voidprint()coutaendl;voidprint()coutaendl;classclassy y:x x/私有继承私有继承私有继承私有继承intb;intb;/4.1继承与派生类继承与派生类public:public:voidmake()voidmake()b=get()+10b=get()+10;/;/调用了基类的成员调用了基类的成员调用了基类的成员调用了基类的成员voidp
15、rint()voidprint()x:print();x:print();coutbendl;coutbendl;voidmain()voidmain()xx1;classyy1;xx1;classyy1;y1.make();y1.make();y1.get();y1.get();/错误错误错误错误 x1.get();/x1.get();/对对对对 y1.print();/y1.print();/输出输出输出输出12221222 4.1继承与派生类继承与派生类l改变继承访问规则改变继承访问规则若希望基类中某些若希望基类中某些若希望基类中某些若希望基类中某些公有成员公有成员公有成员公有成员在派生
16、类中也是在派生类中也是在派生类中也是在派生类中也是公有公有公有公有的的的的,使派生类的使用者能访问它,则可在派生类,使派生类的使用者能访问它,则可在派生类,使派生类的使用者能访问它,则可在派生类,使派生类的使用者能访问它,则可在派生类的公有段说明这些成员,说明的格式为:的公有段说明这些成员,说明的格式为:的公有段说明这些成员,说明的格式为:的公有段说明这些成员,说明的格式为:基类名基类名基类名基类名:成员名成员名成员名成员名;例例例例 classclassx xinta;inta;public:public:intb;x()a=12;b=11;intb;x()a=12;b=11;intget(
17、)returna;intget()returna;voidprint()coutaendl;voidprint()coutaendl;classclassy y:x x/私有继承私有继承私有继承私有继承/4.1继承与派生类继承与派生类public:public:voidmake()b=get()+10;/voidmake()b=get()+10;/调用了基类的成员调用了基类的成员调用了基类的成员调用了基类的成员 voidprint()x:print();coutbendl;voidprint()x:print();coutbendl;x:get;x:get;/x/x类中的类中的类中的类中的ge
18、tget函数函数函数函数 x:b;x:b;/x/x类中的数据成员类中的数据成员类中的数据成员类中的数据成员bb;voidmain()voidmain()classxx1;classyy1;y1.make();classxx1;classyy1;y1.make();coutcouty1.get()y1.get()y1.by1.bendl;/endl;/正确正确正确正确 x1.get();x1.get();/对对对对 y1.print();/y1.print();/输出输出输出输出12221222 4.1继承与派生类继承与派生类通过通过通过通过访问声明访问声明访问声明访问声明调整访问域调整访问域调
19、整访问域调整访问域 访问声明访问声明访问声明访问声明仅仅调整名字的访问仅仅调整名字的访问仅仅调整名字的访问仅仅调整名字的访问,不可为它说明任何类型;若名不可为它说明任何类型;若名不可为它说明任何类型;若名不可为它说明任何类型;若名字为成员函数,在访问声明时,字为成员函数,在访问声明时,字为成员函数,在访问声明时,字为成员函数,在访问声明时,也不准说明任何参数。也不准说明任何参数。也不准说明任何参数。也不准说明任何参数。访问声明访问声明访问声明访问声明只能调整基类的保护只能调整基类的保护只能调整基类的保护只能调整基类的保护段和公有段成员段和公有段成员段和公有段成员段和公有段成员在派生类中的在派生
20、类中的在派生类中的在派生类中的访问域。访问域。访问域。访问域。不允许不允许不允许不允许在派生类中在派生类中在派生类中在派生类中降低或提升降低或提升降低或提升降低或提升基类成员的可访问性基类成员的可访问性基类成员的可访问性基类成员的可访问性。基类的。基类的。基类的。基类的保护段成员只在派生类中的保保护段成员只在派生类中的保保护段成员只在派生类中的保保护段成员只在派生类中的保护段中进行访问声明;基类的护段中进行访问声明;基类的护段中进行访问声明;基类的护段中进行访问声明;基类的公有段成员只能在派生类的公公有段成员只能在派生类的公公有段成员只能在派生类的公公有段成员只能在派生类的公有段中进行声明。有
21、段中进行声明。有段中进行声明。有段中进行声明。classclassx xinta;inta;protected:protected:intint b b;public:public:intc;intc;classy:classy:x x pulic:pulic:x:b;x:b;/error/error protected:protected:x:c;x:c;/error/error;4.1继承与派生类继承与派生类对对对对重载函数的访问声明重载函数的访问声明重载函数的访问声明重载函数的访问声明将调整基类中具有该名将调整基类中具有该名将调整基类中具有该名将调整基类中具有该名的所有函数的访问域。的所
22、有函数的访问域。的所有函数的访问域。的所有函数的访问域。classxclassxpublic:public:f();f();f(intf(inta);a);f(charf(char*p);*p);.classclass y:xy:x .pulicpulic:x:fx:f;.;4.1继承与派生类继承与派生类若若若若派生类中具有与基类同名的函数派生类中具有与基类同名的函数派生类中具有与基类同名的函数派生类中具有与基类同名的函数,则基类中的此函数,则基类中的此函数,则基类中的此函数,则基类中的此函数不能在派生类中进行访问声明。不能在派生类中进行访问声明。不能在派生类中进行访问声明。不能在派生类中进行
23、访问声明。classxclassxpublic:public:f();f();f(intf(inta);a);f(charf(char*p);*p);.classclassy:xy:x public:public:voidvoidf(intf(ints);s);x:fx:f;/error/error;l公有继承的访问规则公有继承的访问规则基基基基类类类类的的的的publicpublic成成成成员员员员和和和和protectedprotected成成成成员员员员被被被被继继继继承承承承到到到到派派派派生生生生类类类类中中中中仍仍仍仍作作作作为为为为派派派派生生生生类类类类的的的的publicpu
24、blic成成成成员员员员和和和和protectedprotected成成成成员员员员,派派派派生生生生类类类类的的的的其其其其他他他他成成成成员员员员可可可可以以以以直直直直接接接接访访访访问问问问它它它它们们们们。但但但但是是是是,类类类类的的的的外外外外部部部部使使使使用用用用者者者者只只只只能能能能通通通通过过过过派派派派生生生生类的对象访问继承来的类的对象访问继承来的类的对象访问继承来的类的对象访问继承来的publicpublic成员。成员。成员。成员。基类的基类的基类的基类的privateprivate成员成员成员成员在私有派生类中是不可直接访问的,所在私有派生类中是不可直接访问的,
25、所在私有派生类中是不可直接访问的,所在私有派生类中是不可直接访问的,所以无论是派生类成员还是通过派生类的对象,都以无论是派生类成员还是通过派生类的对象,都以无论是派生类成员还是通过派生类的对象,都以无论是派生类成员还是通过派生类的对象,都无法直接无法直接无法直接无法直接访问访问访问访问从基类继承来的从基类继承来的从基类继承来的从基类继承来的privateprivate成员,但是可以通过基类提供成员,但是可以通过基类提供成员,但是可以通过基类提供成员,但是可以通过基类提供的的的的publicpublic成员函数间接访问它们。成员函数间接访问它们。成员函数间接访问它们。成员函数间接访问它们。4.1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 派生类与继承 派生 继承 PPT 课件
限制150内