




已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
淺度探索C+對(duì)象模型,CodingGroup張文斌2010-11-21,1,2020/4/26,主要內(nèi)容,簡介單個(gè)類單一繼承多重繼承虛擬繼承,2,2020/4/26,參考文獻(xiàn),深度探索C+對(duì)象模型StanleyB.LippmanC+對(duì)象的內(nèi)存布局陳皓C+對(duì)象模型學(xué)習(xí)筆記鐘聲C+對(duì)象的實(shí)現(xiàn)技術(shù)劉斌武,3,2020/4/26,C+簡史,在20世紀(jì)80年代初期發(fā)明,C+是由美國貝爾實(shí)驗(yàn)室的BjarneStroustrup博士發(fā)明,在C語言的基礎(chǔ)上,借鑒了Simula語言中面向?qū)ο蟮奶卣?998年國際標(biāo)準(zhǔn)組織(ISO)頒布了C+的國際標(biāo)準(zhǔn),通常稱作ANSI/ISOC+下一次標(biāo)準(zhǔn)更新原定是在2009年,一般稱該標(biāo)準(zhǔn)C+0X,但是由于對(duì)新特性的爭端激烈,完整的標(biāo)準(zhǔn)還遙遙無期由于C+語言過于復(fù)雜,以及經(jīng)歷了長年的演變,直到現(xiàn)在(2010年)都沒有一個(gè)編譯器完全符合標(biāo)準(zhǔn)目前最接近C+標(biāo)準(zhǔn)的編譯器有GNUGCC4.5.0和VisualStudio2010等,4,2020/4/26,為什么探索C+對(duì)象模型,滿足對(duì)C+底層實(shí)現(xiàn)機(jī)制的好奇更好地使用C+找工作,5,2020/4/26,各種問題,virtual有哪些用法?虛函數(shù)是怎么實(shí)現(xiàn)的?某個(gè)類對(duì)象占有多大存儲(chǔ)空間?.,6,2020/4/26,面向?qū)ο蟮奶卣?抽象性,抽象性是將具有一定關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu)(屬性)和行為(操作)的對(duì)象抽象成類,隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對(duì)外公開接口,7,2020/4/26,面向?qū)ο蟮奶卣?繼承性,繼承性是子類自動(dòng)共享父類數(shù)據(jù)結(jié)構(gòu)和方法的機(jī)制,8,2020/4/26,面向?qū)ο蟮奶卣?多態(tài)性,表現(xiàn)在繼承中方法的重寫(overwrite)多個(gè)子類從同一父類繼承而來,每個(gè)子類可以重寫父類的某個(gè)方法被重寫的方法在不同的子類中有不同的形式例:動(dòng)物會(huì)叫,因此人、貓、狗都會(huì)叫,但叫的方法不同表現(xiàn)在一個(gè)類中方法的重載(override/overload)一個(gè)類有多個(gè)同名的方法,但這些方法的參數(shù)個(gè)數(shù)或類型不一樣例:人吃不同的東西采用不同的形式,9,2020/4/26,實(shí)驗(yàn)環(huán)境,VisualStudio2008MinGWDeveloperStudio2.05gcc3.3.1,10,2020/4/26,代碼示例,問題:sizeof(Base)是多少?,11,2020/4/26,內(nèi)存布局,static成員獨(dú)立于對(duì)象非static數(shù)據(jù)成員存放在每個(gè)對(duì)象中static數(shù)據(jù)成員存放在對(duì)象之外所有的成員函數(shù)存放在對(duì)象之外對(duì)虛函數(shù)的支持每一個(gè)類維護(hù)一個(gè)虛函數(shù)表(vtbl),其中存放指向虛函數(shù)的指針類的每一個(gè)對(duì)象維護(hù)一個(gè)指向vtbl的指針vptr,可以通過vptr調(diào)用虛函數(shù),12,2020/4/26,內(nèi)存布局示例,Base:Base(),staticintBase:getCount(),staticintBase:count,Base:show(),vtbl,sizeof(Base)=12,13,2020/4/26,指向數(shù)據(jù)成員的指針,static數(shù)據(jù)成員的地址&Point:count與&point.count等價(jià)都指向內(nèi)存中的實(shí)際地址nonstatic數(shù)據(jù)成員的的地址取一個(gè)nonstatic數(shù)據(jù)成員的地址,得到它在類中的偏移量,它們必須與具體的對(duì)象綁定才能取具體的值intPoint:*px=&Point:x取一個(gè)綁定于對(duì)象身上的nonstatic數(shù)據(jù)成員的地址將得到內(nèi)存中該變量的實(shí)際地址int*p=&point.x,14,2020/4/26,Nonstatic成員函數(shù)的處理,nonstatic函數(shù)必須和具體的對(duì)象綁定后才能使用,經(jīng)過編譯器的轉(zhuǎn)換后,它和非成員函數(shù)沒有分別轉(zhuǎn)換過程如下在參數(shù)列表中安插一個(gè)額外的參數(shù)this指針將函數(shù)體內(nèi)對(duì)每一個(gè)nonstatic數(shù)據(jù)成員的存取操作轉(zhuǎn)換為經(jīng)由this指針來存取經(jīng)過namemangling處理后,將該成員函數(shù)轉(zhuǎn)換為一個(gè)外部函數(shù),15,2020/4/26,VS2008Mangling實(shí)例,16,2020/4/26,Static成員函數(shù),靜態(tài)成員函數(shù)沒有this指針,它不需要通過一個(gè)對(duì)象來調(diào)用不能夠直接存取其類中的nonstatic成員不能夠聲明為const,virtual不需要經(jīng)由類對(duì)象來調(diào)用,17,2020/4/26,虛函數(shù)的使用,必須使用引用或指針調(diào)用虛函數(shù),才能表現(xiàn)出多態(tài)用派生類對(duì)象直接對(duì)基類對(duì)象進(jìn)行初始化或賦值將發(fā)生切割,charc,vptr,charc,vptr,intx,Base:f(),Derive:f(),18,2020/4/26,單個(gè)類,class對(duì)于數(shù)據(jù)的封裝不需要額外的開銷,19,2020/4/26,單一繼承,類似單個(gè)類,Parent,Child,GrandChild,20,2020/4/26,帶虛函數(shù)的單一繼承,21,2020/4/26,帶虛函數(shù)的單一繼承,ParentChild,22,2020/4/26,帶虛函數(shù)的單一繼承,GrandChild,23,2020/4/26,多重繼承,多重繼承是C+的一項(xiàng)備受爭議的面向?qū)ο蟮慕D芰Γ驗(yàn)樗鼤?huì)引入很多復(fù)雜性Java語言便沒有這種特性,24,2020/4/26,25,2020/4/26,多重繼承,26,2020/4/26,27,2020/4/26,虛擬繼承,虛擬繼承用來解決多重繼承時(shí)可能會(huì)重復(fù)繼承多個(gè)間接父類的問題,28,2020/4/26,29,2020/4/26,MinG
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司猜燈謎抽獎(jiǎng)活動(dòng)方案
- 公司粽子定做活動(dòng)方案
- 公司紅色培訓(xùn)活動(dòng)方案
- 2025年現(xiàn)代物流管理師職業(yè)資格考試試題及答案
- 2025年思想政治理論與教育考試試卷及答案
- 2025年商品經(jīng)濟(jì)學(xué)考試試卷及答案
- 高危人群自檢策略-洞察及研究
- 2025年科技創(chuàng)新創(chuàng)業(yè)導(dǎo)師職業(yè)資格考試卷及答案
- 2025年旅游管理專業(yè)考試試卷及答案
- 2025年會(huì)計(jì)職業(yè)資格考試試卷及答案
- 專科護(hù)士基地管理制度
- 2025年福建省中考?xì)v史試卷真題(含標(biāo)準(zhǔn)答案)
- 二年級(jí)下二升三數(shù)學(xué)暑假作業(yè)(人教)
- 2025年6月15日青海省事業(yè)單位面試真題及答案解析
- 三級(jí)醫(yī)院評(píng)審標(biāo)準(zhǔn)(2025年版)
- 安全文明標(biāo)準(zhǔn)化施工方案
- 單體藥店GSP質(zhì)量管理制度
- (2025)“安全生產(chǎn)月”安全生產(chǎn)知識(shí)競賽試題庫(答案)
- 材料力學(xué)知到智慧樹期末考試答案題庫2025年遼寧工程技術(shù)大學(xué)
- 醫(yī)療器械財(cái)務(wù)部門的職責(zé)與作用
- 2024年7月黑龍江省普通高中學(xué)業(yè)水平合格性考試生物試卷(含答案)
評(píng)論
0/150
提交評(píng)論