台大资工多媒体实验室.ppt

上传人:wuy****n92 文档编号:54701112 上传时间:2022-10-29 格式:PPT 页数:22 大小:82KB
返回 下载 相关 举报
台大资工多媒体实验室.ppt_第1页
第1页 / 共22页
台大资工多媒体实验室.ppt_第2页
第2页 / 共22页
点击查看更多>>
资源描述

《台大资工多媒体实验室.ppt》由会员分享,可在线阅读,更多相关《台大资工多媒体实验室.ppt(22页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、C+Object Model台大資工多媒體實驗室 林昂賢PreviewWhat is C+object model?Class and objectdata member accesssingle object layoutInheritance object layoutpolymorphismvirtualC+object modelC+compiler底層的實做機制,用來實做各物件的運作模型,使之能具備C+諸多物件導向的性質。物件模型底層的實做機制並未標準化,各家compiler作法不一。但解答許多問題必須根源與我們對C+object model的瞭解。ClassClass是一種abst

2、ract 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 ope

3、rators 來存取。所有的存取都會被compiler轉化為extern實體的直接參考動作Ex.CPoint3D:size=300;Nonstatic Data Member對於nonstatic data member的存取,實際上是透過implicit的this指標來完成。存取會轉換成&(this)+(data member offset)由於offset在compiler time就可算出,其效率等於存取一個C struct member.Single Object layout一個object的實體之內只含class 之 nonstatic data member及某些輔助機制(vpt

4、r)。Class member functions 獨立於object實體之外是獨一無二的一份函示實體(即多個object共享相同的函示實體。)同一個access section的data members排列順序根據其宣告順序而定。Access section的排列順序無強制規定。Single Object layout(cont.2)Class CPoint3dpublic:/.Private:float x;static int size=250;int y;void draw();static int point-count();private:char z;CPoint3d objec

5、txyzInheritance繼承之於Nonstatic data members,是指base object members存在在derived object 中。繼承之於Member functions,是指繼承了對base classs member function的呼叫權利。繼承之於Static data member,是指繼承了對bass class static data member的存取權利。物件模型在繼承下Layout的原則C+保證,出現在derived class中的bass class subobject有其完整之原樣性。Derived class layout=dir

6、ect bass class s+自己新增的data member(nonstatic data or vptr)單一繼承的物件模型單一繼承:指每一個class的direct bass class只能有一個,繼承的深度沒有限制。Class CPoint2dpublic:.protected:float x;float y;oPt2d;float x;float y;oPt2dClass CPoint3d:public CPoint2dpublic:protected:float z;oPt3d;oPt3dfloat x;float y;float z;多重繼承的物件模型多重繼承:指每一各cla

7、ss有兩個以上的direct base class,繼承的深度沒有限制。Class CVertexVertex*next;oV;oV*next;Class CPoint3dV:public CPoint2d ,public CVertexpublic:protected:float z;oPt3dV;oPt3dVfloat x;float y;float z;*next;虛擬繼承Shared subobject 繼承的機制。多重繼承與虛擬多重繼承的比較:多重繼承虛擬多重繼承iosiosiosostreamistreamistreamostreamiostreamiostream虛擬繼承的物件模

8、型(1)下面是Cvertex3d虛擬繼承的架構:Class Point2dpublic:protected:float x;float y;Class Vertex:public virtual Point2dpublic:protected:vertex*next;Class Vertex3d:public virtual Vertex,public Point3d public:protected:float z;Class Point3d:public virtual Point2dpublic:protected:float z;虛擬繼承的物件模型(2)Vptr_Point2dfloa

9、t xfloat yPoint oPt2dVptr_Point2dfloat xfloat yfloat zvpbassPoint2dvptr_point3dvptr_VertexvpbassPoint2dVertex*nextFloat mumbleVertex3d oV3dVptr_Point2dfloat xfloat yvptr_VertexvpbassPoint2dVertex*nextVertex oVVptr_Point2dfloat xfloat yfloat zvpbassPoint2dvptr_point3dPoint3d oPt3dPolymorphism(1)多型:以同

10、一指標指向不同型別的物件。群:一群“同型”但不全然相同的個體。Ex.一群大學生。多型抽象目的:利用“群”的觀念,實現general演算法,並保有“個體”間的差異。不同的derived class object彼此之間有差異,但屬於相同的bass class“群”。多型實做方式:bass point代表群,供general演算法來使用,bass point可指向向其derived class object保有個體差異。Polymorphism(2)Ex.Bass class 魚,drive class 大肚魚,金魚,鯊魚魚的point可以指向大肚魚、金魚、鯊魚魚的object。利用演算法:由第一

11、隻魚到最後一隻魚,魚開始游泳可使所有的魚都開始游泳,但不同類的魚會依照自己的方式來游。演算法簡潔,且保持個體之間的特性。演算法設計者不需瞭解物件的如何實做。C+如何支援多型經由隱含轉型動作,允許derived class object轉化給base type point來指。經由虛擬機制喚起指標所指之object的虛擬函式實體。Object保有type-info。Dynamic_cast可對Object point做型別轉換的安全檢查。當derive object assign 給bass pointer時,需暗含this point位移調整時,稱unnatural polymorphism。

12、暗含的位移調整工作由complier偷偷插入程式之中。Ex.Vertext*pVertex=new Vertext3d;Unnatural polymorphismfloat zvpbassPoint2dvptr_point3dvptr_VertexvpbassPoint2dVertex*nextVertex*pVertexthis pointer(offset)Vertex3dobjectVirtual functionEx.Point2d*pPoint=new Vertex3d;pPoint-draw();當你希望draw()的呼叫是根據pPoint所指的物件而不是pPoint的型別時,d

13、raw()必須是virtual function。Virtual function:使當利用指標來呼叫函式時,呼叫的函式實體是根據指標所指的物件的型別來決定,而不是根據指標的型別來決定。Virtual function in Object model每個object內有一個vptr指標,指向virtual function table。每一個class有一個virtual function table(供object之vptr所指)內含class之中有作用的virtual function的address。Virtual function table 的index 0 存放的是type-inf

14、o用以支援runtime type identification(RTTI)。C+物件模型兩種data member:static/nonstatic data;三種member function:static/nonstatic/virtual function;Class Pointpublic:point(float xtal);virtual Point();float x()const;static int PointCount();protected:virtual void show();float x;static int point-count;Virtual table for pointpoint-countPointCount()point(float)x()show()point()Type_info*vptr;float x;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 初中资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com