![臺大資工多媒體實(shí)驗(yàn)室課件_第1頁](http://file4.renrendoc.com/view/925260b904bb3a01d59610ed387fd643/925260b904bb3a01d59610ed387fd6431.gif)
![臺大資工多媒體實(shí)驗(yàn)室課件_第2頁](http://file4.renrendoc.com/view/925260b904bb3a01d59610ed387fd643/925260b904bb3a01d59610ed387fd6432.gif)
![臺大資工多媒體實(shí)驗(yàn)室課件_第3頁](http://file4.renrendoc.com/view/925260b904bb3a01d59610ed387fd643/925260b904bb3a01d59610ed387fd6433.gif)
![臺大資工多媒體實(shí)驗(yàn)室課件_第4頁](http://file4.renrendoc.com/view/925260b904bb3a01d59610ed387fd643/925260b904bb3a01d59610ed387fd6434.gif)
![臺大資工多媒體實(shí)驗(yàn)室課件_第5頁](http://file4.renrendoc.com/view/925260b904bb3a01d59610ed387fd643/925260b904bb3a01d59610ed387fd6435.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
C++ObjectModel臺大資工多媒體實(shí)驗(yàn)室PreviewWhatisC++objectmodel?ClassandobjectdatamemberaccesssingleobjectlayoutInheritanceobjectlayoutpolymorphismvirtualC++objectmodelC++compiler底層的實(shí)做機(jī)制,用來實(shí)做各物件的運(yùn)作模型,使之能具備C++諸多物件導(dǎo)向的性質(zhì)。物件模型底層的實(shí)做機(jī)制並未標(biāo)準(zhǔn)化,各家compiler作法不一。但解答許多問題必須根源與我們對C++objectmodel的瞭解。StaticDataMember屬於class層級的資料,所有object共享一份staticdatamember。存取staticmember不需要透過任何的object,在無任何object時(shí)已透過memberselectionoperators來存取。所有的存取都會被compiler轉(zhuǎn)化為extern實(shí)體的直接參考動作Ex. CPoint3D::size=300;NonstaticDataMember對於nonstaticdatamember的存取,實(shí)際上是透過implicit的this指標(biāo)來完成。存取會轉(zhuǎn)換成&(this)+(datamemberoffset)由於offset在compilertime就可算出,其效率等於存取一個(gè)Cstructmember.SingleObjectlayout一個(gè)object的實(shí)體之內(nèi)只含class之nonstaticdatamember及某些輔助機(jī)制(vptr)。Classmemberfunctions獨(dú)立於object實(shí)體之外是獨(dú)一無二的一份函示實(shí)體(即多個(gè)object共享相同的函示實(shí)體。)同一個(gè)accesssection的datamembers排列順序根據(jù)其宣告順序而定。Accesssection的排列順序無強(qiáng)制規(guī)定。Inheritance繼承之於Nonstaticdatamembers,是指baseobjectmembers存在在derivedobject中。繼承之於Memberfunctions,是指繼承了對baseclass’smemberfunction的呼叫權(quán)利。繼承之於Staticdatamember,是指繼承了對bassclassstaticdatamember的存取權(quán)利。物件模型在繼承下
Layout的原則C++保證,『出現(xiàn)在derivedclass中的bassclasssubobject有其完整之原樣性』。Derivedclasslayout=[directbassclass]s+[自己新增的datamember(nonstaticdataorvptr)]單一繼承的物件模型單一繼承:指每一個(gè)class的directbassclass只能有一個(gè),繼承的深度沒有限制。ClassCPoint2d{public:…..protected:floatx;floaty;}oPt2d;floatx;floaty;oPt2dClassCPoint3d:publicCPoint2d{public:…protected:floatz;}oPt3d;oPt3dfloatx;floaty;floatz;虛擬繼承Sharedsubobject繼承的機(jī)制。多重繼承與虛擬多重繼承的比較:多重繼承虛擬多重繼承iosiosiosostreamistreamistreamostreamiostreamiostream虛擬繼承的物件模型(1)下面是Cvertex3d虛擬繼承的架構(gòu):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。利用演算法:『由第一隻魚到最後一隻魚,魚開始游泳』可使所有的魚都開始游泳,但不同類的魚會依照自己的方式來游。演算法簡潔,且保持個(gè)體之間的特性。演算法設(shè)計(jì)者不需瞭解物件的如何實(shí)做。C++如何支援多型經(jīng)由隱含轉(zhuǎn)型動作,允許derivedclassobject轉(zhuǎn)化給basetypepoint來指。經(jīng)由虛擬機(jī)制喚起指標(biāo)所指之object的虛擬函式實(shí)體。Object保有type-info。Dynamic_cast可對Objectpoint做型別轉(zhuǎn)換的安全檢查。當(dāng)deriveobject
assign給basspointer時(shí),需暗含thispoint位移調(diào)整時(shí),稱unnaturalpolymorphism。暗含的位移調(diào)整工作由complier偷偷插入程式之中。Ex. Vertext*pVertex=newVertext3d;UnnaturalpolymorphismfloatzvpbassPoint2dvptr_point3dvptr_VertexvpbassPoint2dVertex*nextVertex**pVertexthispointer(offset)Vertex3dobjectVirtualfunctioninObjectmodel每個(gè)object內(nèi)有一個(gè)vptr指標(biāo),指向virtualfunctiontable。每一個(gè)class有一個(gè)virtualfunctiontable(供object之vptr所指)內(nèi)含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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 金融機(jī)構(gòu)保安工作內(nèi)容詳解
- 2025年全球及中國寵物安全救生衣行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025-2030全球頂?shù)装b盒行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025年全球及中國落地式拆碼盤機(jī)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025-2030全球廚房家用電器行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025-2030全球智能電梯紫外線消毒系統(tǒng)行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025-2030全球商用儲水式熱水器行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025-2030全球耐高溫硅膠電纜行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025-2030全球夾具零件行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025-2030全球磁參數(shù)測量儀行業(yè)調(diào)研及趨勢分析報(bào)告
- 四川省自貢市2024-2025學(xué)年上學(xué)期八年級英語期末試題(含答案無聽力音頻及原文)
- 2025-2030年中國汽車防滑鏈行業(yè)競爭格局展望及投資策略分析報(bào)告新版
- 2025年上海用人單位勞動合同(4篇)
- 新疆烏魯木齊地區(qū)2025年高三年級第一次質(zhì)量監(jiān)測生物學(xué)試卷(含答案)
- 衛(wèi)生服務(wù)個(gè)人基本信息表
- 高中英語北師大版必修第一冊全冊單詞表(按單元編排)
- 苗圃建設(shè)項(xiàng)目施工組織設(shè)計(jì)范本
- 廣東省湛江市廉江市2023-2024學(xué)年八年級上學(xué)期期末考試數(shù)學(xué)試卷(含答案)
- 學(xué)校食品安全舉報(bào)投訴處理制度
- 2025年生物安全年度工作計(jì)劃
- 安徽省蕪湖市2023-2024學(xué)年高一上學(xué)期期末考試 生物 含解析
評論
0/150
提交評論