




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 客户关系维护与信息跟踪系统
- 弹唱音乐考试题及答案
- 农村生物技术运用及研发合作协议
- 公共区域环境卫生责任保证函(5篇)
- 农业服务信息系统开发建设合同
- 创意想法生成及可行性分析框架工具
- 商业计划书撰写与提交模板
- 《一元一次不等式的解法:七年级数学代数教案》
- 产品质量检测报告生成工具
- 金利220千伏变电站新建工程环境影响报告表
- 九年级《道德与法治》(上册)教学计划及教学进度
- 医院课件:《抗肿瘤药物分级管理培训》
- 电气防爆专项检查表
- 教科版小学科学六年级上册《1.7微生物与健康》课件
- (正式版)JBT 106-2024 阀门的标志和涂装
- 便利店委托运营协议
- 汉语言文学专业就业方向及就业前景调研报告
- 招商加盟营销方案
- 科研伦理与学术规范-课后作业答案
- 红军长征感人红色故事3-10分钟10篇
- 秋天的雨 省赛获奖
评论
0/150
提交评论