台大资工媒体实验室.pptVIP

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
台大资工媒体实验室

C++ Object Model 台大資工多媒體實驗室 林昂賢 Preview What is C++ object model ? Class and object data member access single object layout Inheritance object layout polymorphism virtual C++ object model C++ compiler底層的實做機制,用來實做各物件的運作模型,使之能具備C++諸多物件導向的性質。 物件模型底層的實做機制並未標準化,各家compiler作法不一。 但解答許多問題必須根源與我們對C++ object model的瞭解。 Class Class是一種abstract data type. 在class宣告時,包含兩種成員: 1.data member :描述class object之屬性。 2.member function:描述class object之行為。 利用class這樣的abstract data type,我們可以定義出(造出)許多的這種 type 的instantiation叫做object。 Static Data Member 屬於class層級的資料,所有object共享一份static data member。 存取static member不需要透過任何的object,在無任何object時已透過member selection operators 來存取。 所有的存取都會被compiler轉化為extern實體的直接參考動作 Nonstatic Data Member 對於nonstatic data member的存取,實際上是透過implicit的this指標來完成。 存取會轉換成 Single Object layout 一個object的實體之內只含class 之 nonstatic data member及某些輔助機制(vptr)。 Class member functions 獨立於object實體之外是獨一無二的一份函示實體(即多個object共享相同的函示實體。) 同一個access section的data members排列順序根據其宣告順序而定。 Access section的排列順序無強制規定。 Single Object layout (cont. 2) Class CPoint3d{ public: //….. Private: float x; static int size = 250; int y; void draw(); static int point- count(); private: char z; }; Inheritance 繼承之於Nonstatic data members,是指base object members存在在derived object 中。 繼承之於Member functions,是指繼承了對base class’s member function的呼叫權利。 繼承之於Static data member,是指繼承了對bass class static data member的存取權利。 物件模型在繼承下 Layout的原則 C++保證,『出現在derived class中的bass class subobject有其完整之原樣性』。 Derived class layout = [ direct bass class ]s + [ 自己新增的data member (nonstatic data or vptr) ] 單一繼承的物件模型 單一繼承:指每一個class的direct bass class只能有一個,繼承的深度沒有限制。 多重繼承的物件模型 多重繼承:指每一各class有兩個以上的direct base class,繼承的深度沒有限制。 虛擬繼承 Shared subobject 繼承的機制。 多重繼承與虛擬多重繼承的比較: 虛擬繼承的物件模型(1) 下面是Cvertex3d虛擬繼承的架構: 虛擬繼承的物件模型(2) Polymorphism(1) 多型:以同一指標指向不同型別的物件。 群:一群“同型”但不全然相同的個體。Ex.一群大學生。 多型抽象目的:利用“群”的觀念,實現general演算法,並保有“個體”間的差異。 不同的derived class object彼此之間有差異,但屬於相同的bass class“群” 。 多型實做方式:bass point代表群,供general演算法來使用,bass point可指向向其derived c

文档评论(0)

erterye + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档