《最新台大资工多媒体实验室ppt课件》由会员分享,可在线阅读,更多相关《最新台大资工多媒体实验室ppt课件(23页珍藏版)》请在金锄头文库上搜索。
1、台大资工多媒体实验室台大资工多媒体实验室PreviewWhat is C+ object model ?Class and objectdata member accesssingle object layoutInheritance object layoutpolymorphismvirtualInheritance繼承之於Nonstatic data members,是指base object members存在在derived object 中。繼承之於Member functions,是指繼承了對base classs member function的呼叫權利。繼承之於Static
2、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 CPoint2dpublic : .protected
3、: float x; float y; oPt2d ;float x;float y;oPt2dClass CPoint3d : public CPoint2dpublic: protected: float z;oPt3d ;oPt3dfloat x;float y;float z;多重繼承的物件模型多重繼承:指每一各class有兩個以上的direct base class,繼承的深度沒有限制。Class CVertexVertex *next; oV;oV* next;Class CPoint3dV: public CPoint2d ,public CVertexpublic: prote
4、cted: float z;oPt3dV ;oPt3dVfloat x;float y;float z;* next;虛擬繼承Shared subobject 繼承的機制。多重繼承與虛擬多重繼承的比較:多重繼承虛擬多重繼承iosiosiosostreamistreamistreamostreamiostreamiostream虛擬繼承的物件模型(1)下面是Cvertex3d虛擬繼承的架構:Class Point2dpublic : protected: float x; float y;Class Vertex: public virtual Point2dpublic : protected
5、 : vertex *next;Class Vertex3d: public virtual Vertex, public Point3d public : protected : float z;Class Point3d: public virtual Point2dpublic : protected : float z;虛擬繼承的物件模型(2)Vptr_Point2dfloat xfloat yPoint oPt2dVptr_Point2dfloat xfloat yfloat zvpbassPoint2dvptr_point3dvptr_VertexvpbassPoint2dVert
6、ex *nextFloat mumbleVertex3d oV3dVptr_Point2dfloat xfloat yvptr_VertexvpbassPoint2dVertex *nextVertex oVVptr_Point2dfloat xfloat yfloat zvpbassPoint2dvptr_point3dPoint3d oPt3dPolymorphism(1)多型:以同一指標指向不同型別的物件。群:一群“同型”但不全然相同的個體。Ex.一群大學生。多型抽象目的:利用“群”的觀念,實現general演算法,並保有“個體”間的差異。不同的derived class object彼
7、此之間有差異,但屬於相同的bass class“群” 。多型實做方式:bass point代表群,供general演算法來使用,bass point可指向向其derived class object保有個體差異。Polymorphism(2)Ex. Bass class 魚, drive class 大肚魚,金魚,鯊魚魚的point可以指向大肚魚、金魚、鯊魚魚的object。利用演算法:由第一隻魚到最後一隻魚,魚開始游泳可使所有的魚都開始游泳,但不同類的魚會依照自己的方式來游。演算法簡潔,且保持個體之間的特性。演算法設計者不需瞭解物件的如何實做。C+如何支援多型經由隱含轉型動作,允許deriv
8、ed class object轉化給base type point來指。經由虛擬機制喚起指標所指之object的虛擬函式實體。Object保有type-info。Dynamic_cast可對Object point做型別轉換的安全檢查。當derive object assign 給bass pointer時,需暗含this point位移調整時,稱unnatural polymorphism。暗含的位移調整工作由complier偷偷插入程式之中。Ex.Vertext *pVertex = new Vertext3d;Unnatural polymorphismfloat zvpbassPoin
9、t2dvptr_point3dvptr_VertexvpbassPoint2dVertex *nextVertex *pVertexthis pointer(offset)Vertex3dobjectVirtual functionEx.Point2d * pPoint = new Vertex3d;pPoint-draw();當你希望draw()的呼叫是根據pPoint所指的物件而不是pPoint的型別時,draw()必須是virtual function。Virtual function :使當利用指標來呼叫函式時,呼叫的函式實體是根據指標所指的物件的型別來決定,而不是根據指標的型別來決定
10、。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-info用以支援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;