版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024货物道路运输合同样书范文
- 2024至2030年中国磁悬浮实验装置行业投资前景及策略咨询研究报告
- 2024至2030年中国滑动水口行业投资前景及策略咨询研究报告
- 2024至2030年中国橡木条凳数据监测研究报告
- 2024至2030年中国指南温度计数据监测研究报告
- 2024至2030年中国多工位织物印刷机数据监测研究报告
- 《100% 可再生能源供应合同》
- 福建省电力有限公司农网配电设施改造技术规范(试行)
- 浙江省杭州市2025届高三年级上学期期中教学质量检测语文试题及答案
- 广东省2025届普通高中毕业班第二次调研考试 生物试卷(含答案解析)
- 浙江省初中名校发展共同体期中联考2024-2025学年七年级上学期11月期中数学试题(含答案)
- 【初中道法】增强安全意识 课件-2024-2025学年统编版道德与法治七年级上册
- 2023年广州市白云区在珠海招聘中小学事业编制教师笔试真题
- 2024-2030年中国非物质文化遗产保护行业开发模式分析规划研究报告
- 【初中化学】二氧化碳的实验室制取课件-2024-2025学年九年级化学人教版上册
- 绿化设计合作协议
- 新修订《中华人民共和国保守国家秘密法》竞赛题库
- 学校提高《规范书写水平、传承汉字文化》活动方案3篇
- 2024年湖北省公务员考试《行测》真题及答案解析
- 2024-2030年中国动漫产业园行业发展现状及投资前景规划展望报告
- 第4章《一元一次方程》-2024-2025学年七年级数学上册单元测试卷(苏科版2024新教材)
评论
0/150
提交评论