第一章 關(guān)于對(duì)象

簡(jiǎn)單對(duì)象模型(A Simple Object Model)


一個(gè)objects是一系列的slots。
members本身不放在object中,只有指向member的指針?lè)旁趏bject中。
? 避免members有不同類型,因而需要不同的存儲(chǔ)空間所招致的問(wèn)題
Object中的members是以slot的索引值來(lái)尋址。



用于C++指向成員的指針概念之中

表格驅(qū)動(dòng)對(duì)象模型(A Table-driven Object Model)


屏幕快照 2017-04-28 下午8.09.27.png

用于virtual functions的一個(gè)有效方案

C++對(duì)象模型(The C++ Object Model)


Class object內(nèi): nonstatic data members
Class object外: static data members、static and nonstatic function members
Virtual functions:

  • vtbl 存放每一個(gè)class生成的指向vf的指針
  • 每一個(gè)class object 被添加一個(gè)指向vtbl的指針(vptr),設(shè)定和充值都由每一個(gè)class的構(gòu)造、析構(gòu)和拷貝運(yùn)算符自動(dòng)完成
  • 每一個(gè)class關(guān)聯(lián)的type_info object(用以支持runtime type identification,RTTI)也經(jīng)由vtbl被指出來(lái)
屏幕快照 2017-04-28 下午8.23.00.png

繼承模型:

  • 直接繼承:base class subobject的data members直接放置于derived class object中
    優(yōu)點(diǎn):緊湊而且有效率的存取
    缺點(diǎn):基類成員改變都導(dǎo)致派生類的重新編譯
屏幕快照 2017-04-28 下午10.02.19.png
  • 虛擬繼承:多重繼承中特有的概念,在派生類中加入虛類指針(增加尋址時(shí)間,相當(dāng)于以時(shí)間換空間)
    class A
    class B1:public virtual A;
    class B2:public virtual A;
    class D:public B1,public B2;
    虛擬繼承在一般的應(yīng)用中很少用到,所以也往往被忽視,這也主要是因?yàn)樵贑++中,多重繼承是不推薦的,也并不常用,而一旦離開(kāi)了多重繼承,虛擬繼承就完全失去了存在的必要因?yàn)檫@樣只會(huì)降低效率和占用更多的空間。

C++程序設(shè)計(jì)模型


  1. 程序模型(procedural model)
  2. 抽象數(shù)據(jù)類型模型(abstract data type model,ADT)
    提供一組表達(dá)式(public 接口),重載運(yùn)算符操作
  3. 面向?qū)ο竽P停╫bject-oriented model)
    繼承,共同相關(guān)類型由抽象基類封裝起來(lái)
    通過(guò)指針或者引用來(lái)間接處理基類對(duì)象才體現(xiàn)多態(tài)

C++支持多態(tài)的方法:

  • 經(jīng)由一組隱含的轉(zhuǎn)化操作
    例如:shape *ps = new circle()
  • 經(jīng)由virtual function機(jī)制
    例如:ps->rotate()
  • 經(jīng)由dynamic_cast 和typeid運(yùn)算符
    例如:circle *pc = dynamic_cast< circle* > (ps)

Class object的內(nèi)存占用

  • 其 nonstatic data members 的總和大小
  • 對(duì)齊所填補(bǔ)的空間
    在32位計(jì)算機(jī)上,通常alignment位4bytes(32位),以使bus的“運(yùn)輸量”達(dá)到最高效率
  • 支持virtual而產(chǎn)生的額外負(fù)擔(dān)
    指針類型告訴編譯器如何解釋某個(gè)地址中的內(nèi)存內(nèi)容及其大小,轉(zhuǎn)型(cast)就是影響解釋方式
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容