




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C++ObjectModel台大資工多媒體實驗室PreviewWhatisC++objectmodel?ClassandobjectdatamemberaccesssingleobjectlayoutInheritanceobjectlayoutpolymorphismvirtualC++objectmodelC++compiler底層的實做機制,用來實做各物件的運作模型,使之能具備C++諸多物件導向的性質。物件模型底層的實做機制並未標準化,各家compiler作法不一。但解答許多問題必須根源與我們對C++objectmodel的瞭解。StaticDataMember屬於class層級的資料,所有object共享一份staticdatamember。存取staticmember不需要透過任何的object,在無任何object時已透過memberselectionoperators來存取。所有的存取都會被compiler轉化為extern實體的直接參考動作Ex. CPoint3D::size=300;NonstaticDataMember對於nonstaticdatamember的存取,實際上是透過implicit的this指標來完成。存取會轉換成&(this)+(datamemberoffset)由於offset在compilertime就可算出,其效率等於存取一個Cstructmember.SingleObjectlayout一個object的實體之內只含class之nonstaticdatamember及某些輔助機制(vptr)。Classmemberfunctions獨立於object實體之外是獨一無二的一份函示實體(即多個object共享相同的函示實體。)同一個accesssection的datamembers排列順序根據其宣告順序而定。Accesssection的排列順序無強制規定。Inheritance繼承之於Nonstaticdatamembers,是指baseobjectmembers存在在derivedobject中。繼承之於Memberfunctions,是指繼承了對baseclass’smemberfunction的呼叫權利。繼承之於Staticdatamember,是指繼承了對bassclassstaticdatamember的存取權利。物件模型在繼承下
Layout的原則C++保證,『出現在derivedclass中的bassclasssubobject有其完整之原樣性』。Derivedclasslayout=[directbassclass]s+[自己新增的datamember(nonstaticdataorvptr)]單一繼承的物件模型單一繼承:指每一個class的directbassclass只能有一個,繼承的深度沒有限制。ClassCPoint2d{public:…..protected:floatx;floaty;}oPt2d;floatx;floaty;oPt2dClassCPoint3d:publicCPoint2d{public:…protected:floatz;}oPt3d;oPt3dfloatx;floaty;floatz;虛擬繼承Sharedsubobject繼承的機制。多重繼承與虛擬多重繼承的比較:多重繼承虛擬多重繼承iosiosiosostreamistreamistreamostreamiostreamiostream虛擬繼承的物件模型(1)下面是Cvertex3d虛擬繼承的架構:ClassPoint2d{public:…protected:floatx;floaty;};ClassVertex:publicvirtualPoint2d{public:…protected:vertex*next;};ClassVertex3d:publicvirtualVertex,publicPoint3d{public:…protected:floatz;};ClassPoint3d:publicvirtualPoint2d{public:…protected:floatz;};虛擬繼承的物件模型(2)Vptr_Point2dfloatxfloatyPointoPt2dVptr_Point2dfloatxfloatyfloatzvpbassPoint2dvptr_point3dvptr_VertexvpbassPoint2dVertex*nextFloatmumbleVertex3doV3dVptr_Point2dfloatxfloatyvptr_VertexvpbassPoint2dVertex*nextVertexoVVptr_Point2dfloatxfloatyfloatzvpbassPoint2dvptr_point3dPoint3doPt3dPolymorphism(2)Ex.Bassclass魚,
driveclass大肚魚,金魚,鯊魚 魚的point可以指向大肚魚、金魚、鯊魚魚的object。利用演算法:『由第一隻魚到最後一隻魚,魚開始游泳』可使所有的魚都開始游泳,但不同類的魚會依照自己的方式來游。演算法簡潔,且保持個體之間的特性。演算法設計者不需瞭解物件的如何實做。C++如何支援多型經由隱含轉型動作,允許derivedclassobject轉化給basetypepoint來指。經由虛擬機制喚起指標所指之object的虛擬函式實體。Object保有type-info。Dynamic_cast可對Objectpoint做型別轉換的安全檢查。當deriveobject
assign給basspointer時,需暗含thispoint位移調整時,稱unnaturalpolymorphism。暗含的位移調整工作由complier偷偷插入程式之中。Ex. Vertext*pVertex=newVertext3d;UnnaturalpolymorphismfloatzvpbassPoint2dvptr_point3dvptr_VertexvpbassPoint2dVertex*nextVertex**pVertexthispointer(offset)Vertex3dobjectVirtualfunctioninObjectmodel每個object內有一個vptr指標,指向virtualfunctiontable。每一個class有一個virtualfunctiontable(供object之vptr所指)內含class之中有作用的virtualfunction的address。Virtualfunctiontable的index0存放的是type-info用以支援runtimetypeidentification(RTTI)。C++物件模型兩種datamember:static/nonstaticdata;三種member
function:static/nonstatic/virtualfunction;ClassPoint{public: point(floatxtal); virtual~Point(); floatx()const; staticintPointCount();p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 19023-2025质量管理体系成文信息指南
- JJG(烟草)27-2010烟草加工在线红外测温仪检定规程
- 2025年英语口语测试全真模拟试卷:多邻国英语测试(DET)情景描述与观点表达策略
- 考研复习-风景园林基础考研试题【培优b卷】附答案详解
- 风景园林基础考研资料试题及答案详解(名校卷)
- 《风景园林招投标与概预算》试题A附参考答案详解【达标题】
- 2025年黑龙江省五常市辅警招聘考试试题题库含答案详解
- 2024年湖南化工职业技术学院单招职业技能测试题库及答案解析 (一)
- 6.1.2呼吸机的发展16世纪人工通气安烈德医生在动物的气
- 2025年Z世代消费趋势分析:新消费品牌品牌形象塑造策略报告
- 2025年金融科技应用考试试题及答案
- 2025年全球科技:中国无人驾驶出租车市场:商业化之路研究报告(英文版)-高盛
- 2025南京租房合同协议范本下载
- 农业光伏电站项目投资估算
- 家具供货结算协议书
- 2025年公证员资格考试全国范围真题及答案
- 高考前2天校长在出征仪式生动员讲话与在座的大家分享了3颗心
- 游客自愿离团协议书
- 2025重庆市潼南区梓潼街道社区工作者考试真题
- 2025年中式烹调师(高级)考试试题题库
- 热射病护理试题及答案
评论
0/150
提交评论