C++面向对象程序设计双语教程(第3版)课件 class 12-Inheritance-3_第1页
C++面向对象程序设计双语教程(第3版)课件 class 12-Inheritance-3_第2页
C++面向对象程序设计双语教程(第3版)课件 class 12-Inheritance-3_第3页
C++面向对象程序设计双语教程(第3版)课件 class 12-Inheritance-3_第4页
C++面向对象程序设计双语教程(第3版)课件 class 12-Inheritance-3_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ObjectivesTounderstandtheconceptofmultipleinheritanceTounderstandwhyinheritanceambiguityoccursinmultipleinheritanceToknowthemechanismofvirtualinheritance01ClassHierarchyandMultipleInheritance03VirtualInheritance02InheritanceAmbiguity01ClassHierarchyandMultipleInheritanceClassHierarchiesTreestructureofclasshierarchyLatticestructureofclasshierarchySingleinheritanceandmultilevelinheritanceMultipleinheritanceandhybridinheritanceMultipleInheritanceBed+sleep():void+weight:intSofa+watchTV():void+weight:intSofaBed+foldOut():voidAclasscanhavemorethanonedirectbaseclass.Theuseofmorethanimmediatebaseclassisusuallycalledmultipleinheritance.CasestudyTherearetheBed,SofaandSofaBedclassesinaclasshierarchy.DefinitionsofDerivedClassesinMultipleInheritanceclassSofaBed:publicSofa,publicBed{//…};Bed+sleep():void+weight:intSofa+watchTV():void+weight:intSofaBed+foldOut():voidSyntaxtodefineaderivedclassofmultipleinheritanceConstructorsandDestructorsofMultipleInheritanceclass

Bed{public:Bed(){}voidsleep(){cout<<"Sleep..\n";}intweight;};class

Sofa{public:Sofa(){}voidwatchTV(){ cout<<"WatchingTV..\n";}intweight;};class

SofaBed:public

Bed,public

Sofa{public:SofaBed(){}voidfoldOut(){ cout<<"Foldout..\n";}};intmain(){SofaBedsBed;sBed.sleep();sBed.watchTV();sBed.foldOut();return0;}DerivedconstructorwithoutparametersSofaBed():Bed(),Sofa(){}ConstructorsandDestructorsofMultipleInheritancederived’sconstructor:base1’sconstructor,base3’sconstructor,base2’sconstructor{}Destroyingderivedobjects’sequence:derivedclass->base3->base2->base1classderived:publicbase1,publicbase2,publicbase3{};Constructingderivedclassobjects’sequence:base1->base2->base3->derivedSyntaxtodefineaconstructorofthederivedclassSyntaxtodefineadestructorofthederivedclassConstructingderivedobjects’sequenceaccordingtodeclaringsequenceofbaseclasses.derived’sdestructor{}ConstructorsandDestructorofMultipleInheritanceclass

Bed{public:Bed(int

w):weight(w){}voidsleep(){cout<<"Sleep..\n";}intweight;};class

Sofa{public:Sofa(int

w):weight(w){}voidwatchTV(){ cout<<"WatchingTV..\n";}intweight;};class

SofaBed:public

Bed,public

Sofa{public:SofaBed(int

w):Bed(w),Sofa(w){}voidfoldOut(){ cout<<"Foldout..\n";}};intmain(){SofaBedsBed(5);sBed.sleep();sBed.watchTV();sBed.foldOut();return0;}Derivedconstructorwithparameters02InheritanceAmbiguity

InheritanceAmbiguityintmain(){SofaBedsBed(5);sBed.sleep();sBed.watchTV();sBed.foldOut();

return0;}cout<<sBed.weight;//errorcout<<sBed.Bed::weight;Bed’s

weight?Sofa’s

weight?MultipleinheritanceambiguitiesWhenthebaseclassesmayhavememberfunctionswiththesamename,thefunctioncallofderivedclassobjectleadstoambiguity.Bed+sleep():void+weight:intSofa+watchTV():void+weight:intSofaBed+foldOut():voidInheritanceAmbiguitySingleinheritancemultipleinheritanceBed+sleep():voidSofa+watchTV():voidSofaBed+foldOut():voidFurniture-weight:intFurniture-weight:intBed+sleep():void+weight:intSofa+watchTV():void+weight:intSofaBed+foldOut():voidInheritanceAmbiguityThediamondproblemoccursinalatticestructure.HowtoavoidduplicatedBaseClasses?Bed+sleep():voidSofa+watchTV():voidSofaBed+foldOut():voidFurniture-weight:intDuplicationInheritanceclass

Furniture{intweight;public:Furniture(int

w):weight(w){}intgetWeight(){returnweight;}};class

Bed:public

Furniture{public:Bed(int

w):Furniture(w){}voidsleep(){cout<<"Sleep..\n";}};class

Sofa:public

Furniture{public:Sofa(int

w):Furniture(w){}voidwatchTV(){cout<<"WatchingTV..\n";}};class

SofaBed:public

Bed,public

Sofa{public:SofaBed(int

w):Bed(w),Sofa(w){}voidfoldOut(){cout<<"Foldout..\n";}};intmain(){SofaBedsBed(5);sBed.sleep();sBed.watchTV();sBed.foldOut();return0;}Result:Sleep..WatchingTV..Foldout..Constructingfurniture...ConstructingBed...Constructingfurniture...ConstructingSofa...ConstructingSofaBed...DuplicationInheritanceProblem:theduplicationofBaseClassesintmain(){SofaBedsBed(5);sBed.sleep();sBed.watchTV();sBed.foldOut();return0;}cout<<sBed.getWeight()<<endl;//error:

ambiguitySleep..WatchingTV..Foldout..Constructingfurniture...ConstructingBed...Constructingfurniture...ConstructingSofa...ConstructingSofaBed...Howtoresolvethisissue?03VirtualInheritanceVirtualInheritanceclass

Furniture{intweight;public:Furniture(int

w):weight(w){}intgetWeight(){returnweight;}};class

Bed:virtualpublic

Furniture{public:Bed(int

w):Furniture(w){}voidsleep(){cout<<"Sleep..\n";}};class

Sofa:virtualpublic

Furniture{public:Sofa(int

w):Furniture(w){}voidwatchTV(){cout<<"WatchingTV..\n";}};Class

SofaBed:public

Bed,public

Sofa{public:SofaBed(int

w):Furniture(w),Bed(w),Sofa(w){}voidfoldOut(){cout<<"Foldout..\n";}};intmain(){SofaBedsBed(5);sBed.sleep();sBed.watchTV();sBed.foldOut();cout<<sBed.getWeight()<<endl;return0;}virtualinheritanceVirtualInheritanceBed+sleep():voidSofa+watchTV():voidSofaBed+foldOut():voidFurniture-weight:intVirtualinheritanceVirtualinheritanceConstructorandVirtualInheritanceClass

SofaBed:public

Bed,public

Sofa{public:SofaBed(int

w):Furniture(w),Bed(w),Sofa(w){}voidfoldOut(){cout<<"Foldout..\n";}};FurnitureBedSofaSofaBedConstructingsequence:intmain(){SofaBedsBed(5);sBed.sleep();sBed.watchTV();sBed.foldOut();cout<<sBed.getWeight()<<endl;return0;}VirtualInheritanceVirtualInheritanceisa

mechanismthatoffersawaytopreventmultiple“instances”ofagivenclassappearinginaninheritancehierarchywhenusingmultipleinheritances.

Virtualbaseclassesofferawaytosavespaceandavoidambiguitiesinclasshierarchiesthatusemultipleinheritances.Whenabaseclassisspecifiedasavirtualbase,itcanactasanindirectbasem

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论